尝试启动Javafx应用程序时遇到并发问题。
我已经编写了一个基于文本的游戏,但我也想创建自己的控制台来进行游戏,因此我制作了一个独立运行的控制台javafx应用程序。我将控制台导出为Jar文件并将其添加到我的游戏的构建路径中。
游戏开始后不久,执行此代码片段,开始一个新线程:
var apiRoutes = require('./app/routes/api')(router);
启动的新线程如下所示:
public Game(String playerName) {
player = new Player(playerName);
try {
conThread = new ConsoleThread();
conThread.start();
} catch (Exception e) {
e.printStackTrace();
}
parser = new Parser(conThread);
createRooms();
}
这个线程类应该在主游戏继续时启动Console-application。但是,一旦启动应用程序,控制台就会按预期显示,但游戏的其余部分会冻结。主游戏线程在启动新线程后停止,只有在我手动关闭控制台应用程序时才会继续。
我想让控制台应用程序在自己的线程上运行,玩家可以输入文本,主游戏线程会读取它并打印出其他内容。我不了解Java并发性?
答案 0 :(得分:2)
在应用程序退出之前,通过调用Platform.exit或所有应用程序窗口都已关闭,启动方法不会返回。
因此,您的代码会阻止new ConsoleThread()
。
另请注意,launch()
只能调用一次,因此,根据您在此处的具体操作,您可能需要重新考虑整个策略。
相关问题:Call JavaFX in Java program and wait for wait to exit before running more code