假設以下簡化示例。設B代表一類處理的一些柵格數據:Java:從Runnable返回結果
import java.awt.image.BufferedImage;
public class B implements Runnable{
private boolean c;
private Runnable f;
public B (boolean c_, Runnable f_) { c = c_; f = f_;}
public BufferedImage process() {
//Some operations
BufferedImage output = null;
if (c) output = new BufferedImage(100, 100, BufferedImage.TYPE_INT_ARGB);
return output;
}
public void run() { process();}
}
的過程()方法可以但可能不產生輸出評價者。由於計算成本的原因,該過程在單獨的線程中運行。
讓A代表運行過程的類。它也包含了一些後期處理步驟,等到線程完成:
import java.awt.image.BufferedImage;
public class A {
public A(){}
public void compute() {
boolean c = true;
B b = new B(c, new Runnable() {
public void run() {
//Post process, after the thread has been finished
BufferedImage img = ??? //Get resulting raster, how?
if (img != null) {
//Perform some steps
}
}
});
Thread t = new Thread(b);
t.start(); //Run procedure
}
}
然而,如何讓生成的柵格使用過程()「內的」 運行B的()方法方法中創建一個?
避免模型中,當輸出圖像一起代表B的數據成員與
b.getImage();
我看了一則關於回調
但如何在這裏實現它的帖子?感謝您的幫助和簡短的例子。
聽起來像是'Callable'工作。 – Kayaman
你基本上在問:「如何從返回'void'的方法返回一個值?」。所以我想你想要一個'Callable',而不是'Runnable'。 –
它看起來像你傳遞給B的回調,但實際上沒有調用它? (變量'f')你應該在'B'中用'process()'的結果調用'f()'。 – misaka