代码之家  ›  专栏  ›  技术社区  ›  Mohammed Yasser

JavaFX问题只读取变量的初始值,而从不读取新值?

  •  0
  • Mohammed Yasser  · 技术社区  · 3 年前

    我正在开发这个javaFX应用程序,该应用程序创建一个对象“StructureNode”,并在更新屏幕UI输入时更新其数据,然后我将该对象分配给“TrussMember”,该“TrussMember”包含两个“StructureNode“实例,最后使用“StructureSolver”来检索每个“TrussMember”中存在的“StructureNode”中的数据,并将其用作矩阵的索引。

    问题是,除了这两个整数之外,所有值都能成功读取 private int x_index=1 , y_index=2; 他们总是返回初始值,无论是零、一还是一百。这个问题让我抓狂,希望你能帮上忙。

    StructureNode class //对象封装数据

    public class StructureNode {
    
        .
        .
        .
        private int x_index=0 , y_index=0;
        .
        .
        .
        public int getX_index() {
            //System.out.println("x_index = " + x_index);
            return x_index;
        }
    
        public void setX_index(int nex_index) {
            x_index = nex_index;
            System.out.println("x_index changed to " + x_index);
        }
    
        public int getY_index() {
            //System.out.println("y_index = " +y_index);
            return y_index;
        }
    
        public void setY_index(int ney_index) {
            y_index = ney_index;
            System.out.println("y_index changed to " + y_index);
        }
    
    

    TrussModelBuider class //将“StructureNode”添加到“StructureMember”并将这些成员添加到名为“特拉斯”的更大模型中的类。

    public class TrussModelBuider{
    
        private boolean isBuilt = false;
        private Truss structure;
    
        public TrussModelBuider(Truss truss){
            structure = truss;
        }
    
        @Deprecated
        public void addNode(double X, double Y){
            StructureNode n = new StructureNode();
            n.setCoordinates(new Coordinates(X, Y));
            structure.addJoint(n);
            System.out.println("+pt["+X+", "+Y+"]");
        }
        public void addNode(StructureNode n){
            structure.addJoint(n);
            System.out.println("+pt["+n.getCoordinates().getX_COO()+", "+n.getCoordinates().getY_COO()+"]");
        }
    
        public void removeNode(double X, double Y){
            structure.getJoints().remove(findNodeIndex(X,Y));
        }
    
        private int findNodeIndex(double X, double Y){
            int index = 0;
            for (int i = 0; i < structure.getJoints().size(); i++) {
                if (structure.getJoints().get(i).getCoordinates().getX_COO()==X
                && structure.getJoints().get(i).getCoordinates().getY_COO()==Y) {
                    index = i;
                    break;
                }
            }
            return index;
        }
    
        public void addMember(TrussMember member){
            structure.addMember(member);
            System.out.println("+mem "+member.getID()+": "+member.getStartJoint()+", "+member.getEndJoint());
        }
        public void removeMember(int ID){
            structure.getMembers().remove(findMember(ID));
        }
       
    
    }
    
    public class StructureSolver {
    
        private Truss structure;
        .
        .
        .
        public StructureSolver(Truss truss){
            structure = truss;
        }
        .
        .
        .
        public void setStructure(Truss structure) {
            this.structure = structure;
        }
        .
        .
        .
        private void createStructureStiffnessMatrix(){
            K = new StiffnessMatrix(structure.getJoints().size()*2);
            assignIds();
    
            for (TrussMember member: structure.getMembers()) {
    
                int Nx = member.getNx();
                int Ny = member.getNy();
    
                int Fx = member.getFx();
                int Fy = member.getFy();
    
                double lambdaX = calculateLambdaX(member);
                double lambdaY = calculateLambdaY(member);
    
                double lambdaXSq = lambdaX*lambdaX/ member.getLength();
                double lambdaYSq = lambdaY*lambdaY/ member.getLength();
                double lambdaXY = lambdaX*lambdaY/ member.getLength();
    

    TrussMember class

    public class TrussMember {
    
        private StructureNode startJoint, endJoint;
        .
        .
        .
        public TrussMember() {
        }
    
        public TrussMember(StructureNode startJoint, StructureNode endJoint) {
            this.startJoint = startJoint;
            this.endJoint = endJoint;
        }
        .
        .
        .    .
        .
        .
        public double getLength() {
            double calculatedLength = 0;
            Point2D p1 = new Point2D(startJoint.getCoordinates().getX_COO(),
                    startJoint.getCoordinates().getY_COO());
            Point2D p2 = new Point2D(endJoint.getCoordinates().getX_COO(),
                    endJoint.getCoordinates().getY_COO());
            calculatedLength = p1.distance(p2);
            return calculatedLength;
        }
    
        public StructureNode getStartJoint() {
            return startJoint;
        }
    
        public void setStartJoint(StructureNode startJoint) {
            this.startJoint = startJoint;
        }
    
        public StructureNode getEndJoint() {
            return endJoint;
        }
    
        public int getNx(){return getStartJoint().getX_index();}
        public int getNy(){return getStartJoint().getY_index();}
    
        public int getFx(){return getEndJoint().getX_index();}
        public int getFy(){return getEndJoint().getY_index();}
    
    }
    

    in the controller class #onActionMethod

            StructureSolver solver = new StructureSolver();
            solver.setStructure(truss);
            solver.solve();
    

    我尝试使用另一个线程,并尝试使它们成为最终的,没有初始值,但总是相同的结果。

    0 回复  |  直到 3 年前