2012-02-20 1 views
3

私はpbThreadコンストラクタに何をするのかを教えてくださいJ2MEコードこのコードはどうなりますか?

Thread aaa = new Thread(pb) { private final ProgressBar val$pb; 

     public void run() { while (this.val$pb.getValue() < 100) { 
      try { 
      this.val$pb.setValue(this.val$pb.getValue() + 1); 
      Thread.sleep(10L); } catch (InterruptedException ex) { 
      } 
      this.val$pb.repaint(); 
     } 
     mainForm.homeScreen = new HomeScreen(); 
     mainForm.homeScreen.show(); 
     } 
    }; 
    aaa.start(); 

を理解しようとしています。 new Thread(pb)からnew Thread()に変更すると、このコードはどうなるでしょうか? val$pbに影響しますか?それはJ4ME libraryを使用しています - :私はこの

Thread aaa = new Thread() { private final ProgressBar val=null ;//new Thread(pb) ProgressBar val$pb; 

     public void run() { try {while (this.val.getValue() < 100) { //try added by me 
      try { 
      this.val.setValue(this.val.getValue() + 1); 
      Thread.sleep(10L); } catch (InterruptedException ex) { 
      } 
      this.val.repaint(); //draws progress bar as a loading screen before showing home screen 
     } 
     }catch(Exception e){ 
     mainForm.homeScreen = new HomeScreen(); 
     mainForm.homeScreen.show(); // draws home screen 
     } 
     } 
    }; 
    aaa.start(); 

EDITのように編集したので、上記のコードにコンパイルすることができませんでした。

+0

あなた自身でコードを実行して変更を加え、何が起こるかはおそらく最も簡単でしょう。 – Spags

答えて

1

コードがコンパイルされた場合、pbThreadコンストラクタのパラメータです。

のJava MEのAPIは、スレッドのコンストラクタでは、単一のパラメータとして、これらのオブジェクトが可能のみを指定するので、それは単一パラメータであることを考えると、それはRunnableまたはStringのいずれであってもよいです。

私は新しいスレッドに新しいスレッド(PB)を変更した場合、このコードは次のようになりますどのように()?

PBがRunnableある場合(スレッド・インスタンスaaaオーバーライドが(そうでない場合はPBのために呼び出される)メソッドを実行しているため、あなたのコードスニペットでは、pb.runを呼び出すの痕跡がとにかく他に存在しないため、その後、物事はそう変わりませんあなたのスニペットからあまりにも多くのコードをカットするか、デザインエラーの匂いがします)。

pbがStringの場合、スレッドaaaの名前はpb値の代わりにデフォルトになります。

val $ pbには影響しますか?

さらにコードを投稿しないと、難しいと言われます。好ましくはSSCCEという形式です。

val$pbこれは面白いようですが、これはコードスニペットで初期化するものをカットしたと仮定して、変数の正当な識別子になる可能性があります。


更新あなたがprivate final ProgressBar val=nullを初期化することを考えると、あなたのコードの2番目のバージョン、で - その結果として、その上にメソッドを呼び出すrunメソッド文でNPE this.val.getValue()がスローされますとことをcatchブロックに右を進めますコードコメントに基づいてホーム画面を描画します。

アップデート2


私はprivate final ProgressBar valを初期化していない場合、それはそう何がそれを初期化する別の方法だろうvariable val might not have been initializedとしてエラーになりますか?

あなたのスニペットには限られた量のコードしかありません。このような

頭に浮かぶ一つの方法は、pbとinitにある、:PBは、ProgressBarインスタンスを参照し、最終的に宣言されている場合は、上記の

//... 
new Thread(pb) { private final ProgressBar val$pb = pb; // ... 

はコンパイルがあります。

この場合、の代わりにval$pbを使用することができます(この変数はコードスタイルの設定に導入された可能性があります)。

また、j4meへの参照では、スレッドコンストラクタでProgressBarを使用すると、pbがこのクラスのインスタンスである場合、私にはほとんど意味がないことを認めなければなりません。投稿した最初のスニペットにどのように表示されたのだろうかと疑問に思うだけです。Thread aaa = new Thread(pb)...

+0

その$記号は変数名で何を意味しますか?それはちょうど名前ですか? – virpara

+0

@virpara必ずしもそうではありません。より多くのコードを投稿すれば、それを伝えることができます。あなたが今までに与えたスニペットで、私はそれを見つけるためのコンパイル可能なものを作ることができませんでした。 – gnat

+0

私は 'private final ProgressBar val'を初期化しないと' variable valが初期化されていない可能性があります。それを初期化するもう1つの方法です。 – virpara

関連する問題