无法在主游戏线程的单独线程上启动Javafx应用程序

时间:2017-01-23 20:54:53

标签: java multithreading javafx

尝试启动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并发性?

1 个答案:

答案 0 :(得分:2)

来自documentation

  

在应用程序退出之前,通过调用Platform.exit或所有应用程序窗口都已关闭,启动方法不会返回。

因此,您的代码会阻止new ConsoleThread()

另请注意,launch()只能调用一次,因此,根据您在此处的具体操作,您可能需要重新考虑整个策略。

相关问题:Call JavaFX in Java program and wait for wait to exit before running more code