私は別のクラスから、つまり実行することによってJavaFXGUIアプリケーションを開始StartClient
しています。
public class StartClient extends Application {
private Table gui;
@Override
public void start(Stage stage) throws Exception {
gui = new Table();
gui.start(stage);
サーバーに接続するためのスルーを開始Task
し、サーバーによって割り当てられたターンを受け取ります。これは、を使用してGUIで設定しPlatform.runLater
ます。
Task<Void> task = new Task<Void>() {
@Override
protected Void call() throws Exception {
connectToServer(); // connect to server, set up socket, i/o streams
Object read = inputStream.readObject();
if (read instanceof String) {
turn = //parseInt from read
Platform.runLater(new Runnable() {
public void run() {
gui.setPlayerID(turn);
}
});
}
}
}; //end of task
私の問題は、プレーヤーの番である場合にプレーヤーが行った動きを取得し、次のようなことを行ってサーバーに送り返したいということです。
if(networkClientID == gui.getState().getTurn()){
do {
action = Table.getAction(); //static getAction returns the move from the table if there was one
} while (action == -1);
outputStream.writeObject(action + ""); // write out turn
}
これをバックグラウンドで実行しますかThread
(GUIから静的変数を読み取っていますか、それともjavaFXスレッドでこれを実行する必要があります。つまり、内部Platform.runLater
で試しましたが、どこにも到達せず、プログラムがスタックしています。)
この問題を解決する方法について、提案、ヘルプ、アドバイスを歓迎します。ありがとう!