TextInputDialog错误

时间:2018-01-04 15:17:22

标签: javafx java-8 javafx-8

我在JavaFX应用程序中显示我的TextInputDialog时遇到问题。在代码中:

 TextInputDialog tid = new TextInputDialog("Your name");
    tid.setTitle("Table");
    tid.setHeaderText("You have won!");
    tid.setContentText("Enter your name: ");
    tid.showAndWait();

我得到了这样的错误:

Exception in thread "Timer-2" java.lang.IllegalStateException: Not on FX application thread; currentThread = Timer-2

是的,我在我的申请中使用了三到四个计时器。

GitHub - https://github.com/verygoodat/FlappyBox / src / Application / GameController / - function setState(int),switch(2),我应该在游戏和游戏中创建一条消息,但我不能。 那么,什么可能导致这个问题呢?

Platform.runLater(() -> tid.showAndWait())无效

case 2://pause
            TextInputDialog tid = new TextInputDialog("Ваше имя");
            tid.setTitle("Таблица рекордов");
            tid.setHeaderText("Вы побили чей-то рекорд!");
            tid.setContentText("Введите ваше имя: ");
            Platform.runLater(() -> tid.showAndWait());
            Timers.stopTimers();
            pr.setFill(Color.rgb(0,0,0,0.5));
            pr.clearRect(0,0,pre.getWidth(), pre.getHeight()-50);
            pr.fillRect(0,0,pre.getWidth(), pre.getHeight());
            pr.setFill(Color.WHITE);
            stat = "КОНЕЦ ИГРЫ!";
            pr.fillText(stat, WIDTH/2-150, HEIGHT/2);
            pr.fillText( "\nPOINTS: "+gamecontroller.score, WIDTH/2-170, HEIGHT/2);
            gameover = true;
            break;

它的工作原理如下:

 Platform.runLater(() ->
            {
                TextInputDialog tid = new TextInputDialog();
                tid.setTitle("Таблица рекордов");
                tid.setHeaderText("Вы побили чей-то рекорд!");
                tid.setContentText("Введите ваше имя: ");
                tid.showAndWait();
            });

1 个答案:

答案 0 :(得分:0)

在JavaFX中,任何更新UI的东西都需要在FX应用程序线程上运行。您可以使用计时器等在自己的线程中执行任何其他操作,但是应该在Application线程上显示TextInputDialog。

你可以这样做:

!/^[\x00-\x7F]*$/.test('отправка.py');  // => true
!/^[\x00-\x7F]*$/.test('bla.py');  // => false