iT邦幫忙

0

JavaFX 如何在新的線程 更新@FXML Label (已解決)

JavaFX 如何在新的線程 更新@FXML Label

我在新的線程中增加語句
FXLabel.setText("更新Label");
卻報錯
Exception in thread "Thread-4" java.lang.NullPointerException

下面是簡化後的code 的問題
fxml檔有一個按鈕連接button1()方法

———————————————————————————————————
Controller 類別
public void button1() {
Thread t1 = new Thread(new HelloThread());
t1.start();
———————————————————————————————————
新的線程 類別
public class HelloThread implements Runnable {
@FXML
public Label FXLabel;
@Override
public void run() {
FXLabel.setText("更新Label");
}}
———————————————————————————————————
解答
我自己查找了些資料 真是痛苦JavaFX中文資訊也不多大多都是英文資料
因為JavaUI 是一個獨立線程,無法在其他新的線程直接調用 會報錯
有一個方法就是 在子線程中使用這個方法
Platform.runLater(new Runnable() {
@Override
public void run() {
//要更新的JavaFX代碼放這
}
});
這又引發另一個問題 上面代碼只能靜態的Static
正常中你在Controller類別中會注入
@FXML
public Label FXLabel;
這修改為靜態的
@FXML
public Static Label FXLabel; // 會報錯

所以你只能 新增一個物件 不要用注入的 且是靜態而且new出來
public static Label MyLabel = new Label("this Label");
再把這個MyLabel.setText("更新Label")
放進去
Platform.runLater(new Runnable() {
@Override
public void run() {
//要更新的JavaFX代碼放這
MyLabel.setText("更新Label") ;
}
});

尚未有邦友回答

立即登入回答