2012-02-20 54 views
3

我想了解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(); 

請告訴我這是什麼pbThread構造函數來完成。如果我將new Thread(pb)更改爲new Thread(),此代碼的外觀如何?它會影響val$pb?上面的代碼無法編譯,所以我編輯這樣

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(); 

編輯: - 它使用J4ME library

+0

對於您自己運行代碼並進行這些更改並查看會發生什麼,可能是最容易的。 – Spags 2012-02-20 17:00:51

回答

1

如果您的代碼編譯,那麼pbThread構造函數的參數。

鑑於它是一個單參數,它可以是RunnableString自從Java ME API僅指定這些對象儘可能在Thread構造的單個參數。

如果我將新線程(pb)更改爲新線程(),該代碼的外觀如何?

如果PB爲Runnable那麼事情可能不會改變,因爲線程實例aaa覆蓋運行方法(否則會被調用的PB),並因爲在你的代碼片段,沒有調用pb.run反正別人的痕跡(設計錯誤的氣味或從你的片段中刪除了太多代碼)。

如果pb是String那麼線程aaa的名稱將是默認值而不是pb值。

它會影響val $ pb嗎?

很難說,除非你發佈更多的代碼 - 最好在SSCCE的形式。

val$pb看起來很有趣,但這可能是一個變量的合法標識符,假設在代碼片段中已經刪除了初始化它的東西。


在你的代碼的第二個版本更新,因爲你初始化private final ProgressBar val=null - 作爲一個結果,在調用它的方法將拋出NPE this.val.getValue(),然後繼續直接進入catch塊中的run方法語句根據代碼註釋繪製主屏幕


UPDATE2

如果我不初始化private final ProgressBar val然後提示錯誤爲variable val might not have been initialized所以這將是另一種方式來初始化呢?

那麼在代碼片段數量有限的情況下,只能猜測。浮現在腦海

一種方法是用pb給init,這樣的:如果PB是指進度實例,並宣佈最終

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

上面可以編譯。

請注意,在這種情況下,val$pb並不是非常必要,因爲可以使用pb代替它(可能是爲代碼樣式首選項引入了此變量)。

此外,鑑於您對j4me的引用不得不承認,在線程構造函數中使用ProgressBar - 如果pb是此類的一個實例 - 對我來說幾乎沒有意義。人們只能想知道它是如何出現在您發佈的初始片段Thread aaa = new Thread(pb)...

+0

$符號在變量名中的含義是什麼?這只是一個名字嗎? – virpara 2012-02-20 18:51:00

+0

@virpara不一定如此。如果你發佈更多的代碼,可以告訴。有了你已經給出的片段,我不能做任何可編譯的東西來找出它 – gnat 2012-02-20 18:53:46

+0

如果我不初始化'私人最終ProgressBar VAL'然後它給錯誤作爲變量VAL可能沒有被初始化,是另一種初始化它的方法。 – virpara 2012-02-21 15:51:41

相關問題