在JAVAFX启动时,有时想把应用开始的配置加载完毕,成功或者失败进行意识,一般写在start()方法中,由于Fxml模板绑定的是另一个controller,在Main的start方法在重新new或者静态方法等都无法获得UI线程,可以使用下面的方法:
先看一下效果:
启动类中的start方法
@Override
public void start(Stage primaryStage) throws Exception {
FXMLLoader fxmlLoader = new FXMLLoader();
URL url = getClass().getResource("/html/index.fxml");
fxmlLoader.setLocation(url);
fxmlLoader.setBuilderFactory(new JavaFXBuilderFactory());
Parent root = fxmlLoader.load();
primaryStage.setTitle("QN10_PRO_3K");
primaryStage.setResizable(false);
primaryStage.setScene(new Scene(root));
IndexController indexController = fxmlLoader.getController();
indexController.init();
primaryStage.show();
}
controller中更新UI
@FXML
private TextArea Text_Area_Info;//信息显示区域
public void init() {
try {
File file = new File(Main.configFileName);
if(!file.exists()) {
this.Text_Area_Info.appendText("配置文件加载失败!");
}else {
Main.con.setConfigurationMap(new ParseXML().parseTypeXML(Main.chipName,Main.configFileName));
ConfigurationFactory.chipElementMap.put(Main.chipName, Main.con);
Device[] devices = Service.listDevices();
if(devices != null && devices.length > 0) {
AbstarctOperationFactory.device = devices[0];
AbstarctOperationFactory.device.open();
//System.out.println("已连接:"+AbstarctOperationFactory.device);
}else {
this.Text_Area_Info.appendText("没有可连接设备,5秒后退出!!!");
new Thread(new Runnable() {
@Override
public void run() {
try {
java.util.concurrent.TimeUnit.SECONDS.sleep(5);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.exit(0);
}
}).start();
}
}
} catch (Exception e) {
}
}