2014-05-02 55 views
1

我寫一些代碼的Android, 這裏的結構:(僞)將繼續運行的線程?

public class AThread extends Thread { 
    public void run() { 
    int i = 0; 
    while(true){ 
     i++; 
     System.out.println(i); 
    } 
    } 
} 

然後我新AThread類的實例,並調用start()方法。 我的問題是: int我似乎不會繼續在while循環中添加。 爲什麼是這個原因,以及如何讓線程繼續運行在while循環中寫入的任務 。

因爲我運行的一些實時分析功能...

下面是實際的一個我寫道:

int i = 0; 
    running = true; 
    while(running) { 
     i++; 
     System.out.println(i);    
     if((lines = bufferedReader.readLine()) != null) { 
      System.out.println("analyzing"); 
      // read two lines per time. 
      result = filter(lines, bufferedReader.readLine()); 
      if(!result[0].equals("emp")) { 
       System.out.println("x: " + result[0] + " " + "y: " + result[1]); 
       System.out.println(MainActivity.analysisKeyPress.classify(Integer.valueOf(result[0]), Integer.valueOf(result[1]), "0")); 
       System.out.println("insert into db.."); 
       MainActivity.dbhelper.addKeyLog(getCurrentRunningService(), result[0], result[1]); 
      } 
     } 
    } 

看來,int i不會增加,直到有幾行爲BufferedReader閱讀。

+1

你在'Thread'上調用了'.start()'嗎? – nKn

+0

是的,我確實調用了代碼甚至不能編譯的.start()方法 – user3482468

+0

。 –

回答

1

如果你註釋掉這一部分:

result = filter(lines, bufferedReader.readLine()); 
if(!result[0].equals("emp")) { 
    System.out.println("x: " + result[0] + " " + "y: " + result[1]); 
    System.out.println(MainActivity.analysisKeyPress.classify(Integer.valueOf(result[0]), Integer.valueOf(result[1]), "0")); 
    System.out.println("insert into db.."); 
    MainActivity.dbhelper.addKeyLog(getCurrentRunningService(), result[0], result[1]); 
} 

循環工作。

顯然,該部分中的某些方法會阻止您的代碼。嘗試運行調試器並逐步執行代碼,以查看代碼停止執行的位置。這就是爲什麼你的循環不會繼續。

+0

是的,我試過了,現在可以使用了。 輸入行來自在命令下運行的進程(Android): (getevent -l/dev/input/event2)。我會嘗試調試你提到的塊,感謝現在的一個很好的支持。 – user3482468

1

增加並輸入索引後,您有一個readLine呼叫,這是一個等待操作。確保您的BufferedReader對象獲得了預期的行。