他のスレッドからGUIにノードを追加したいときに問題が発生します。IllegalStateExceptionがスローされ、修正方法がわかりません。
public class DashBoardController implements Initializable {
@FXML
private FlowPane dashBoardPane;
@Override
public void initialize(URL url, ResourceBundle rb) {
try {
RTMClientV2 client = new RTMClientV2("localhost", 9009, new DashBoardArranger(this));
Thread clientTH = new Thread(client);
clientTH.start();
} catch (IOException ex) {
Logger.getLogger(DashBoardController.class.getName()).log(Level.SEVERE, null, ex);
}
}
public synchronized void addToDashBoard(Pane root){
dashBoardPane.getChildren().add(root);
}
}
このコントローラーを使用して.FXMLファイルをGUIにロードするだけで、プログラムが起動すると、サーバーとの通信を担当するスレッド(clientTH.start();)が実行され、すべて問題ありません。ただし、サーバーが初期化後にデータを送信する場合。このデータをダッシュボードに追加したいので、以前と同じようにメソッドpublic synchronized void addToDashBoard(Pane root)を使用しますが、java.lang.IllegalStateExceptionがスローされ、理由がわかりません。
ところで:「この親ノードがシーンに接続されている場合、その子のリストはJavaFXアプリケーションスレッドでのみ変更する必要があります。この制限に違反すると、IllegalStateExceptionがスローされます。」しかし、これは役に立ちません。私のため。ダッシュボードがGUIの別のペインに追加されました。
ところで:出力:
スレッド「Thread-4」の例外java.lang.IllegalStateException:FXアプリケーションスレッドではありません。currentThread = Thread-4
at com.sun.javafx.tk.Toolkit.checkFxUserThread(Unknown Source)
at com.sun.javafx.tk.quantum.QuantumToolkit.checkFxUserThread(Unknown Source)
at javafx.scene.Parent $ 1.onProposedChange(Unknownソース)
com.sun.javafx.collections.VetoableObservableList.add(不明なソース)
at com.sun.javafx.collections.ObservableListWrapper.add(不明なソース)
probeobserver.gui.probeSite.DashBoardController.addToDashBoard(DashBoardController.java:125 )
probeobserver.gui.probeSite.DashBoardArranger.setCompName(DashBoardArranger.java:66)で
でprobeobserver.rtm.RTMClientV2.readAllDataAndUpdate(RTMClientV2.java:144)
でprobeobserver.rtm.RTMClientV2.run(RTMClientV2.java:80)
でjava.lang.Thread.run(Thread.java:722)