私たちはGUIとCLIの両方で動作するクライアント/サーバアプリケーションを開発しています。 CLIに問題はありませんが、私たちはJavaFXで実装しようとしています:JavaFxとソケットリスナー
私たちのサーバはクライアントに(ソケット経由で)いくつかのオブジェクトを送ります。
これは私達のSocketServerListener(ライタ)である:
public class SockeServerListener extends Thread implements ServerListener{
private CliController controller;
private ObjectInputStream in;
private ObjectOutputStream out;
public SocketServerListener(Socket server, CliController controller) throws UnknownHostException, IOException {
this.controller = controller;
this.out = new ObjectOutputStream(server.getOutputStream());
this.in = new ObjectInputStream(server.getInputStream());
}
public void publishMessage(String message) throws IOException, RemoteException {
out.writeObject(message);
out.flush();
}
public void run() {
try {
while (true) {
Dialogue dialogue = (Dialogue) in.readObject();
controller.parseDialogue(dialogue);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
はSocketServerListenerはインタフェース(CLI/GUI)を更新し、受信したオブジェクトを「実行」誰実行一つであるコントローラによってインスタンス化されます
public void parseDialogue(Dialogue dialog) {
dialog.execute(view); //view is an interface extended by both the Cli and GUI
this.canWrite = true;
}
私は、これはCLIと非常によく動作しますが、それはJavaFXの
Exception in thread "Thread-7" java.lang.IllegalStateException: Not on FX application thread; currentThread = Thread-7
で例外がスローされます、言ったように
すべてのGUIを生成するために使用されたクラスをコントローラとして使用しようとしましたが、(肯定的な)結果は一切ありませんでした。 スレッドをインスタンス化してJavaFXと連携し、必要な画面を表示するメソッドを呼び出すにはどうすればよいですか?
はおそらくcontroller.parseDialogue(dialogue);
への呼び出しは、UIを更新している