2012-05-25 18 views
6

私は太陽のJavaのチュートリアルを通していくつかの読書をしていた、と私はここに、このページに出くわした:このjava .execute()メソッド呼び出しは何を意味しますか?

:見出しの下

How to Make an Applet

「アプレットのスレッドは、」私は、コードのこの部分を発見しました

//Background task for loading images. SwingWorker worker = (new SwingWorker<ImageIcon[], Object>() { public ImageIcon[] doInBackground() { final ImageIcon[] innerImgs = new ImageIcon[nimgs]; ...//Load all the images... return imgs; } public void done() { //Remove the "Loading images" label. animator.removeAll(); loopslot = -1; try { imgs = get(); } ...//Handle possible exceptions } }).execute(); } 

最初は新しくなったので、これは愚かな質問であれば申し訳ありません。しかし、私はそれを聞いたことがない ".excecute()"。私はそれを理解していない、私はそれについてgoogleから何かを見つけることができません。私はここがこれを...匿名の内部クラスだと思っていますか? (私を修正してください)、イメージに読み込むスレッドを開始しています。 start()の呼び出しでrun()メソッドが呼び出されたと思いますか?この混乱を解消するのを助けてください。

+1

チュートリアル:http://docs.oracle.com/javase/tutorial/uiswing/concurrency/worker.html –

+0

http://docs.oracle.com/javase/6/docs/api/javax/swing /SwingWorker.html; http://docs.oracle.com/javase/tutorial/uiswing/concurrency/ –

答えて

7

executeは、SwingWorkerの方法です。あなたが見ているのは、anonymous classがインスタンシエートされ、すぐに呼び出されるexecuteメソッドがあることです。それはworker変数にexecuteの結果を代入しているようだ、とドキュメントがexecutevoid関数であることを教えてくれるので、私は、私は少しそのコードを驚いている認めざるを得ない

は、しかし、コンパイルします。

私たちが少しコードを解体すれば、より明確になります。まず、我々は(これは括弧で大きなビットである)すべて同時に、SwingWorkerを拡張する匿名クラスを作成し、そのインスタンスを作成します。

SwingWorker tmp = new SwingWorker<ImageIcon[], Object>() { 
    public ImageIcon[] doInBackground() { 
      final ImageIcon[] innerImgs = new ImageIcon[nimgs]; 
     ...//Load all the images... 
     return imgs; 
    } 
    public void done() { 
     //Remove the "Loading images" label. 
     animator.removeAll(); 
     loopslot = -1; 
     try { 
      imgs = get(); 
     } ...//Handle possible exceptions 
    } 

}; 

その後、我々は(これはexecuteを呼び出し、workerに結果を代入します

SwingWorker worker = tmp.execute(); 

更新::、それは私には思える、コンパイルされません)そのビットであり、確かに、私はdoesn't compileそれを試してみましたが、それ。そうではない素晴らしい例のコードです。これは、コンパイルします:

SwingWorker worker = new SwingWorker<ImageIcon[], Object>() { 
    public ImageIcon[] doInBackground() { 
      final ImageIcon[] innerImgs = new ImageIcon[nimgs]; 
     ...//Load all the images... 
     return imgs; 
    } 
    public void done() { 
     //Remove the "Loading images" label. 
     animator.removeAll(); 
     loopslot = -1; 
     try { 
      imgs = get(); 
     } ...//Handle possible exceptions 
    } 

}; 
worker.execute(); 
+0

これはThreadのインスタンスではありません。まあ、今私は愚かな気分です。 – yoonsi

+0

@yoonsi:愚かなことを感じる必要はありません。匿名のクラスは難しいです。 'SwingWorker'は、Swingによって管理される単一のバックグラウンドスレッド上で動作するようにキューに入れられるという点で、スレッドとの関連性があります。 –

1

.execute()は匿名クラスのインスタンス上で実行するメソッドを呼び出しています。つまりnew SwingWorker<ImageIcon[], Object>(){...}によって作成されたオブジェクトです。 (SwingWorkerクラスを拡張するクラスです)。

javadocによると、executeメソッドは、既存のワーカースレッドで実行されるインスタンスによって表されるタスクをスケジューリングします。ワーカースレッドのライフサイクル(例えば、作成、開始など)は、Swingインフラストラクチャによって処理される。

関連する問題