【问题标题】:Can't launch a Javafx Application on a separate thread from a Main Game Thread无法在与主游戏线程不同的线程上启动 Javafx 应用程序
【发布时间】:2017-06-08 12:01:30
【问题描述】:

我在尝试启动 Javafx 应用程序时遇到并发问题。

我编写了一个基于文本的游戏,但我也想创建自己的控制台来玩它,因此我制作了一个控制台 javafx 应用程序,它自己运行良好。我将控制台导出为 Jar 文件并将其添加到我的游戏的构建路径中。

游戏开始后不久,这个sn-p被执行,开始一个新线程:

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 并发有什么不了解的地方?

【问题讨论】:

    标签: java multithreading javafx


    【解决方案1】:

    来自documentation

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

    所以你的代码块在new ConsoleThread()

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

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

    【讨论】:

    • 感谢您的回答!是的,我没有阅读足够的文档,似乎在编写这个程序时我需要重新考虑我的策略。不管怎么说,还是要谢谢你! :D
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多