2013-10-19 79 views
0

我是一個全新的進入android和java的怪人。所以,請忍受我。所以,我有以下一段代碼(僅提取物): -線程不能在java中工作android

Thread timer=new Thread(); 
try{ 
    timer.sleep(2000); 
} 
catch(InterruptedException e){ 
    e.printStackTrace();      
} 
finally{ 
Intent openstartingpoint=new Intent("android.intent.action.START"); 
startActivity(openstartingpoint); 
} 

我在我蝕接收的錯誤是: - The method sleep() should be accessed in a static way
中的應用也有效。但是,當前活動的文本未顯示。我只有2秒的空白屏幕。

== ==編輯

但是,一切都運行良好,該代碼。誰能告訴我爲什麼?

Thread timer=new Thread(){ 
public void run(){ 
    try{ 
    sleep(5000); 
    } 
catch(InterruptedException e){ 
    e.printStackTrace();      
    } 
    finally{ 
    Intent openstartingpoint=new Intent("android.intent.action.START"); 
    startActivity(openstartingpoint); 
    } 
} 
}; 
    timer.start(); 
+0

學習機器人之前,我強烈建議你對Java的紮實的知識,你將永遠不會後悔,如果你是在做了職業生涯的以爲它會阻止你很多麻煩 –

回答

4

這只是你得到一個警告,因爲睡眠是一個靜態方法,它應該被稱爲,

Thread.sleep(200);

這意味着它會把當前線程睡眠200毫秒,所以即使你使用一個對象來調用它,它仍然會將當前線程(不是定時器)置於睡眠狀態。

如果一個:

說你是在主線程,並調用

timer.sleep(200);

就會把主線程(正如我所說當前線程,定時器沒有啓動,電流線程是主要)在睡覺。

但情況二:您正在創建的新線程(計時器)將進入睡眠狀態。這是不同的。

you can refer to java docs for better understanding.

+0

做什麼你是用靜態方法表示的? – h2O

+0

如果考慮語法 - 它表示使用static關鍵字聲明的方法,如:public static void main(String str [])。從概念上說 - 這意味着該方法不會是特定於對象的。它應該用類名來調用。 – Batty

2

在第一個,你沒叫在正確的背景下sleep()方法。就像以前的人們說的那樣,它是Thread類中的靜態方法,如果你想在一段時間內停止線程,它必須在run方法中調用。 還要小心你開始線程的地方,如果它改變GUI,因爲它會導致異常。

2

將方法調用爲Thread.sleep(2000);

sleep是一個類Thread的靜態方法,所以它可以直接使用classname來訪問。

在下面提到的第二個代碼中,您沒有收到錯誤,因爲您正在創建一個匿名類,它以靜態方式直接使用Thread類調用sleep方法。

Thread timer=new Thread() 
    { 
     public void run(){ 
     try 
      { 
       sleep(5000); 
      } 
    catch(InterruptedException e) 
     { 
     e.printStackTrace();      
     } 
     finally 
     { 
     Intent openstartingpoint=new Intent("android.intent.action.START"); 
     startActivity(openstartingpoint); 
     } 
     } 
    }; 
     timer.start();