当前位置: 首页 > 知识库问答 >
问题:

如何在JavaFX应用程序线程上等待用户输入而不使用show And等待?

程鸿波
2023-03-14

我想暂停在JavaFX应用程序线程上执行方法并等待用户与UI交互。不要冻结UI很重要。

例子:

Button start = ...
Button resume = ...

start.setOnAction(evt -> {
     System.out.println("starting");
     start.setDisable(true);
     System.out.println("please press resume button.");
     pause();
     System.out.println("done");
     start.setDisable(false);
});

resume.setOnAction(evt -> resume());

我应该如何实现< code>pause()和< code>resume()方法?< br >事件处理程序的执行应在< code>pause()处等待;调用,直到用户按下< code>resume按钮并且调用< code>resume方法。

共有2个答案

佴淮晨
2023-03-14

我目前正在运行JFX 8,在那里我的工具包类中有类似的功能。

Toolkit.getToolkit().enterNestedEventLoop(obj);

Toolkit.getToolkit().exitNestedEventLoop(obj);

我没有看过JFX 9的源代码,但我敢打赌,平台方法只是相同的快捷方式。

谭煜
2023-03-14

您可以通过使用Platform.enterNestedEventLoop暂停事件处理程序的执行和Platform.exitNestedEventLoop(从JavaFX 9开始可用)来恢复执行来做到这一点:

private final Object PAUSE_KEY = new Object();

private void pause() {
    Platform.enterNestedEventLoop(PAUSE_KEY);
}

private void resume() {
    Platform.exitNestedEventLoop(PAUSE_KEY, null);
}

Platform.enterNestedEventLoop使用与第一个参数相同的参数调用Platform.exitNestedEventLoop时返回。

 类似资料:
  • 我正在编写一个棋盘游戏,我需要检查玩家正在移动的敌人并提示进行攻击。但是,由于游戏是如何制作的,移动方法是在JavaFX应用程序线程上调用的,我希望能够提示用户是否要与敌人战斗。 我的对话框工作正常,使用等待和通知,在主线程上不工作,会导致程序崩溃,有人知道如何暂停这个线程的执行,直到用户单击其中一个按钮。 我为描述道歉,太晚了。 检查敌人的方法该方法检查敌人,如果用户选择是,则返回敌人。它运行在

  • 我正在尝试从JavaFX应用程序中创建一个JFrame窗口。我正在使用Oracle Java 8,我能够在Linux,Windows中做我需要的事情,但在Mac OS中却不能。这似乎是一个JVM实现问题。以下是我的要求: 我需要调用一个创建游戏窗口的库方法(JFrame的扩展类)。我需要能够在游戏中使用键盘。 我可以访问库的源代码但无意更改库的源代码 我需要在游戏结束后处理游戏信息,所以我的主线程

  • 我正在我的UI线程中调用一个方法。在这个方法中创建了一个新线程。我需要UI线程等待这个新线程完成,因为我需要这个线程的结果来继续UI线程中的方法。但我不想让UI在等待时冻结。有没有办法让UI线程在不忙的情况下等待?。

  • 问题内容: 我有一个线程类“ MyThread”和主应用程序,简称为“ Gui”。我想从线程类创建一些对象,但在本示例中,我仅创建了一个对象。线程类完成一些工作,然后向Gui类发出信号,指示需要用户输入(此指示目前仅是更改按钮的文本)。然后,线程应等待用户输入(在这种情况下为单击按钮),然后继续执行其操作… 如何在(多个)线程中等待用户输入? 问题答案: 默认情况下,具有事件循环,可以处理信号和插

  • 我正在尝试为我的频道制作IRC机器人。我希望机器人能够从控制台接收命令。为了让主循环等待用户输入内容,我添加了循环: 这似乎不起作用。我听说过BufferedReader,但我从未使用过,也不确定这是否能解决我的问题。

  • null 所以我面临一个问题,如果打开,等待输入,如何停止它?我尝试过将它放在线程中并或使用作为标志,但它并没有停止