【发布时间】:2016-10-12 08:31:59
【问题描述】:
我们正在开发一个客户端-服务器应用程序,它必须同时使用 GUI 和 CLI。 我们对 CLI 没有任何问题,但我们正在努力用 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 并调用显示我们需要的屏幕的方法?
谢谢
【问题讨论】:
标签: java multithreading sockets user-interface javafx