现在还不太清楚到底是什么问题。(无论如何,对我来说)自然的方法就是
checkAnswer(...)
方法一种简单地“按框中的内容执行”的方法,即将答案作为参数,进行检查,并向调用者返回一个值,指示其是否正确。
这样你也可以避免所有的丑陋
static
黑客。
public class Ans {
public boolean checkAns(String answer) {
if (answer.equalsIgnoreCase(Qn.getAns()) {
Qn.setQuestion();
return true ;
} else {
return false ;
}
}
}
然后在控制器中
public class ViewController implements Initializable {
private Ans ans ;
@FXML
private Label label;
@FXML
private TextField textField;
@Override
public void initialize(URL location, ResourceBundle resources) {
ans = new Ans();
}
public void enter(ActionEvent event) {
if (ans.checkAns(textField.getText())) {
} else {
}
}
}
请注意这如何允许您保持适当的关注点分离:
Ans
类不需要知道关于UI的任何信息(它根本不应该知道),所有特定于UI的代码都封装在它所属的控制器类中。
不太清楚你为什么要问
Platform.runLater(...)
和使用
Task
,因为您发布的代码似乎都不涉及任何后台线程(也就是说,这些代码似乎都不会花费大量的时间来运行)。例如,如果
checkAns(...)
方法正在执行一些远程查找,并且确实需要时间运行,您可以在
任务
并从任务的
onSucceeded
处理程序。参见,例如。
Using threads to make database requests
。你的问题似乎更多的是关于基本的OO设计以及如何定义不同对象之间的关系;我认为你根本不是在问线程问题。