私の問題は、インターフェイスをフリーズしたくないので、バックグラウンドで実行されている多くのポイントを計算する長いメソッドがあるため、swingworker
作成しようとしているため、どのように機能するのか理解できないことです。fa=worker.get()
コンポーネント画像を描画するための結果を取得したいと考えています。fa=worker.get()
しかし、コンソール"titi"
が印刷され、プログラムの次の部分に到達したことを確認するために他の多くの印刷を行ったが、誰も印刷されていないため、どこに行くのかわかりません。コンパイルが実行された後または実行中にどこに行くのかを知るのを手伝ってくださいget()
。コードのすべてのブロックが必要なものを実装する方法がわかっている場合は大歓迎です。
public void paintComponent(final Graphics g1){
// TODO Auto-generated method stub
final int width=getWidth();
final int height=getHeight();
image= new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
//On transforme le rectangle de base en un rectangle qui a le meme ratio que le cadre contenant l'ancien
//(Il yaura dessus la meme fractale mais avec plus de fond noir) afin que l'on puisse zoomer sans deformer la fractale
frame = frame.expandToAspectRatio((double)getWidth()/getHeight());
FlameAccumulator fa=null;
worker= new SwingWorker<FlameAccumulator,FlameAccumulator>(){
@Override
protected FlameAccumulator doInBackground() throws Exception {
// TODO Auto-generated method stub
System.out.println("exception");
return builder.build().compute(frame,width,height,density);
}
};
try {
System.out.println("titi");
fa=worker.get();
} catch (InterruptedException | ExecutionException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Graphics g0=(Graphics2D)g1;
if(fa==null){
System.out.println("toto");
for (int i = 0; i <height; i++) {
for (int j = 0; j < width; j++) {
image.setRGB(j,i,0);
}
}
}
else{
System.out.println("tata");
for (int i = 0; i <height; i++) {
for (int j = 0; j < width; j++) {
image.setRGB(j,i,fa.color(palette, background, j, height-1-i).asPackedRGB());
}
}
}
g0.drawImage(image,0,0,null);
}