我正在使用IntelliJ IDEA。 我有一个“Clicker游戏”项目,我正在努力,因为我想学习java和练习一点。我的JavaFX窗口中的标签需要不断更新。我想要这样做的方法是通过Timer和TimerTask,但我在某处读到这不是一个好主意,我宁愿使用Worker / Task / Service。实现它(调用我的Update()方法)只能工作一次,但会导致运行时错误。我不知道我做错了什么,有谁可以帮助我?
更新方法:
public void Update(){
dollarlabel.setText(Double.toString(player.getDollars()));
vaselineCost.setText(Double.toString(player.shop.vaseline.cost));
bolCost.setText(Double.toString(player.shop.bol.cost));
appleCost.setText(Double.toString(player.shop.apple.cost));
duikenCost.setText(Double.toString(player.shop.duiken.cost));
}
服务:
public Service service = new Service() {
@Override
protected Task createTask() {
Update();
return null;
}
};
启动服务的方法:
public void InitializeService(){
service.start();
}
只需按一下按钮即可调用InitializeService。理想情况下,它会在程序开始时调用,但是嘿......一次出现一个问题吗?
当我调用“InitializeService”时出现错误:http://pastebin.com/jrsVh23R
为了澄清,我不知道空指针异常来自何处。我在使用它之前声明了我的变量,即:
public Label dollarlabel = new Label();
public Label vaselineCost = new Label();
public Label bolCost = new Label();
public Label duikenCost = new Label();
public Label appleCost = new Label();
谁知道我做错了什么?提前谢谢。
答案 0 :(得分:1)
尝试这样的事情......
protected Task createTask() {
return new Task<Void>() {
protected String call() throws Exception
{
Update();
return null;
}
};
}
改编自此link
中的代码片段关于服务的开始......
button.setOnAction(new EventHandler<ActionEvent>()
{
public void handle()
{
// Call to initilaizeService()
}
}) ;
为了理解事件处理程序,我使用了这个link
在更新方法中添加此..
void update()
{
Platform.runLater (new Runnable ()
{
public void run ()
{
//all calls to setText goes here
}
}) ;
}