2017-01-05 4 views
0

タスクではないクラスでupdateMessage( "...")を使用します。 この問題を解決するにはどうすればよいですか? 関数にupdateMessage( "...")を実行できるタスクハンドルを与えることは可能ですか?タスクではないクラスでupdateMessage( "...")を使用したい

import javafx.concurrent.Task; 

public class TestTask extends Task<Void> { 
    private final static int COUNT = 1000; 

    @Override 
    protected Void call() { 
     doTaskStuff("Found "); 
     return null; 
    } 

    public void doTaskStuff(String s) { 
     for (int i = 0; i < COUNT; i++) { 
     System.out.println(i); 
     this.updateProgress(i, COUNT); 
     this.updateMessage(s + (i + 1) + "!"); 
     Dummy.dummy(this, i); 
     try { 
      Thread.sleep(1); 
     } catch (InterruptedException interruptedException) { 
     } 
     } 
    } 
} 

class Dummy { 
    public static void dummy(TestTask testTask, int i) { 
     String s = ""; 
     if (i == 0) { 
     s = "i == 0"; 
     } else { 
     s = "i != 0"; 
     } 
     testTask.updateMessage(s);// does not work 
    } 
} 

答えて

0

ここで問題となるのはprotectedです。もちろん、あなたがメソッドをオーバーライドし、視認性を高めるが、これは私見悪いアプローチになりますことができます:メソッドは、単一のメッセージを設定していること

@Override 
public void updateMessage(String message) { 
    super.updateMessage(message); 
} 

注意、したがって、あなただけの値を返すことができます:

あなたはできる複数の更新については
updateMessage(Dummy.dummy(i)); 
public static String dummy(int i) { 
    return (i == 0) ? "i == 0" : "i != 0"; 
} 

また、インタフェースを使用してこの種の機能へのアクセスを提供します。

Dummy.dummy(this::updateMessage, i); 
public static void dummy(Consumer<String> updater, int i) { 
    updater.accept((i == 0) ? "i == 0" : "i != 0"); 
} 
関連する問題