【发布时间】:2015-07-24 00:26:16
【问题描述】:
我希望我没有重复问题,但我找不到专门针对我的问题的问题。 我正在开发一个小型数学闪存卡应用程序,使用 JavaFX 创建 GUI。该程序应按如下方式运行:
- 用户选择设置,然后按开始按钮。
- gui 显示问题和文本字段供用户输入。
- 用户在 X 秒内输入答案或 gui 自动移至下一个问题 - 或者,用户可以通过按 next 按钮立即移至下一个问题。
- GUI 显示分数和平均值。
问题是用户文本字段中的getText() 在按下开始 按钮后立即被处理,而没有给用户输入答案的机会。在处理用户的答案之前,如何让程序等待 X 秒或单击 next 按钮?这是我的代码:
//start button changes view and then runs startTest()
start.setOnAction(e -> {
setLeft(null);
setRight(null);
setCenter(test_container);
running_program_title.setText(getDifficulty().name() + " Test");
buttons_container.getChildren().clear();
buttons_container.getChildren().addAll(next, quit, submit);
startTest();
});
这是问题代码……至少我是这么看的。
//startTest method calls askAdd() to ask an addition question
void startTest() {
int asked = 0;
int correct = 0;
while (asked < numberOfQuestions) {
if(askAdd()){
correct++;
asked++;
}
}
boolean askAdd() {
int a = (int) (Math.random() * getMultiplier());
int b = (int) (Math.random() * getMultiplier());
//ask question
question.setText("What is " + a + " + " + b + "?");
//code needed to pause method and wait for user input for X seconds
//retrieve user answer and return if its correct
return answer.getText().equalsIgnoreCase(String.valueOf(a+b));
}
我尝试过使用Thread.sleep(X),但无论我指定多久都会冻结gui,然后在进入测试屏幕之前通过addAsk() 方法和循环。 (我知道是因为我设置了程序来打印问题并回答输入到控制台)。它显示了最后一个问题,仅此而已。
我没有包含 next 按钮代码,因为无论如何我都无法让 gui 转到测试页面。
感谢您对任何代码的任何帮助。
【问题讨论】:
标签: java multithreading user-interface javafx freeze