JavaFX服务/任务/工作者和自动化

时间:2016-02-26 16:50:22

标签: java service javafx task worker

我正在使用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();
谁知道我做错了什么?提前谢谢。

1 个答案:

答案 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 
            } 
     }) ;
 }