2017-07-06 59 views
1

好吧,所以我做了我的布局,我试图获得2个标签,progressbar和2个textFields。当从FXML获取对象时,JavaFX返回null

我让他们这样的:

@FXML private TextField instDir; 
@FXML private TextField jsonDir; 
@FXML private ProgressBar progressBar; 
@FXML private Label pText; 
@FXML private Label error; 

但只有那些不为空是INSTDIR和jsonDir。 我FXML文件:Java类的https://hastebin.com/cohuhidobi.xml 零件在那里我使用对象:

void setProgressBar(float i, float max) { 
    if(progressBar != null) { 
     progressBar.setProgress(i/max); 
    }else{ 
     System.out.println("progressBar is null"); 
    } 
    if(pText != null) { 
     pText.setText((int) i + "/" + (int) max); 
    }else{ 
     System.out.println("pText is null"); 
    } 
    System.out.println((int) i + "/" + (int) max); 
    //text = (int)i+"/"+(int)max; 
} 

它总是返回都为空。

我只想在控制器注册

感谢您的帮助的对象!

+1

在什么时刻,你调用这个方法?你需要调用'FXMLLoader.load()'来让它们初始化。 –

+1

你什么时候调用setProgressBar方法?如果你在构造函数中调用这个@FXML gui的东西还没有初始化。改用[initialize](https://stackoverflow.com/a/34785689/2298490)方法。 – grill2010

+0

@SergeyGrinev我在FXMLLoader.load()后调用它。 –

回答

2

检查,如果你的控制器实现Initializable并具有这样的结构:

public class FXMLController implements Initializable { 

    @FXML private TextField instDir; 
    @FXML private TextField jsonDir; 
    @FXML private ProgressBar progressBar; 
    @FXML private Label pText; 
    @FXML private Label error; 

    /** 
    * Initializes the controller class. 
    */ 
    @Override 
    public void initialize(URL url, ResourceBundle rb) { 
     // ... 
    } 

    //Getters and setters 
} 
+0

初始化方法得到什么网址?我将它作为独立应用程序运行 –

+1

当您创建控制器的实例时,会自动调用initialize方法。你不需要设置网址。请参阅[文档](https://docs.oracle.com/javase/8/javafx/api/javafx/fxml/Initializable.html) – Darkros