- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在尝试启动 Javafx 应用程序时遇到并发问题。
我编写了一个基于文本的游戏,但我也想创建自己的控制台来玩它,因此我制作了一个单独运行良好的控制台 javafx 应用程序。我将控制台导出为 Jar 文件并将其添加到我的游戏的构建路径中。
游戏开始后不久,将执行此代码片段,启动一个新线程:
public Game(String playerName) {
player = new Player(playerName);
try {
conThread = new ConsoleThread();
conThread.start();
} catch (Exception e) {
e.printStackTrace();
}
parser = new Parser(conThread);
createRooms();
}
启动的新线程如下所示:
public class ConsoleThread extends Thread{
public ConsoleThread() {
Application.launch(Console.class);
}
public void printToConsole(String text) {
Console.printGameInfo(text);
}
public String textFromConsole() {
return Console.getTextField();
}
该线程类应该在主游戏继续时启动控制台应用程序。然而,一旦应用程序启动,控制台就会按预期显示,但游戏的其余部分会卡住。主游戏线程在启动新线程后就会停止,并且只有在我手动关闭控制台应用程序时才会继续。
我想让控制台应用程序在自己的线程上工作,玩家可以输入文本,主游戏线程将读取它并打印出其他内容。我对 Java 并发有什么不明白的地方?
最佳答案
来自documentation :
The launch method does not return until the application has exited, either via a call to Platform.exit or all of the application windows have been closed.
因此您的代码在 new ConsoleThread()
处阻塞。
另请注意,launch()
只能调用一次,因此,根据您在此处执行的具体操作,您可能需要重新考虑此处的整个策略。
相关问题:Call JavaFX in Java program and wait for wait to exit before running more code
关于java - 无法在主游戏线程的单独线程上启动 Javafx 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41815467/
我是一名优秀的程序员,十分优秀!