我从另一个类启动一个JavaFX GUI应用程序,即通过这样做的StartClient
。JavaFX访问gui按钮从另一个线程动作
public class StartClient extends Application {
private Table gui;
@Override
public void start(Stage stage) throws Exception {
gui = new Table();
gui.start(stage);
我开始通过该予连接到服务器和接收服务器,这是我使用Platform.runLater
在GUI设置分配匝一个Task
。
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
,我都尝试过,但没有得到任何地方,我的程序卡住。)
任何建议, H埃尔普,建议欢迎如何解决这个问题。谢谢!
非常感谢您的回复。我会给这个镜头。 @ blo0p3r – 2013-02-22 21:03:28
即使我没有FXML,我也可以实现MVC模型吗?我只是通过扩展Application来创建JavaFX gui。 – 2013-02-22 21:09:34
是ResultFileWatcher控制器吗?我有点困惑。或者它仅仅是倾听变化的任务。 – 2013-02-22 21:11:28