2013-05-09 38 views
0

我從我的最後一個問題得到answer。但是現在我無法在完成我的任務後的一分鐘後使用並停止線程。我實際上想在完成我的工作一分鐘後關閉/停止線程。所以,我非常困惑:我怎樣才能做到這一點使用:不能使用和停止線程

public class Frame2 extends javax.swing.JFrame implements Runnable{ 
    public Frame2() { 
     initComponents(); 
    } 

    public void run(){ 
     long startTime = System.currentTimeMillis(); 
     while ((System.currentTimeMillis() - startTime) < 1000) {   
      System.out.print("DOING MY THINGS"); 
     } 
    } 
} 

的問題是,它不是在所有的工作,當我關閉含此主題的代碼行幀

System.out.print("DOING MY THINGS"); 

工作在一個無限循環。

在此先感謝。

+0

看看這個話題 - http://stackoverflow.com/questions/7595490/stop-a-thread-after-period-of-time – danieln 2013-05-09 07:15:52

+0

什麼的initComponents呢?它不是JFrame API的一部分。 – bezmax 2013-05-09 07:27:40

+0

你有沒有使用過NetBeans? lols – 2013-05-09 07:28:34

回答

3

當我關閉含此主題

幀不包含線程框架。框架可以有一個參考。但是線程本身會運行,直到執行完成(方法結束時爲run),而不會少一秒。

你不能只是「停止」線程。它必須總是完成它的執行(再次,run方法結束)。

你寫的代碼應該工作得很好,並停止在60秒內寫東西。如果你想讓它在關閉框架時終止,你應該添加一些變量來檢查並在你想要線程終止時寫入true

例子:

private volatile boolean terminated = false; 

public void run(){ 
    long startTime = System.currentTimeMillis(); 
    while (!terminated && System.currentTimeMillis() < startTime + 60000) { 
    System.out.print("DOING MY THINGS"); 
    // here I want to do my things done in just one minute 
    // and after that I want to stop the thread at will! 
    } 
} 

public void stop() { 
    terminated = true; 
} 
+0

實際上,當我啓動線程時,system.out命令不工作,當我只點擊JFrame關閉按鈕時,Thread停止自己在無限循環中執行system.out.print命令 – 2013-05-09 07:21:57

+0

然後我們需要看到更多的代碼,錯誤在別的地方。該線程本身看起來很不錯。 – bezmax 2013-05-09 07:22:47

+0

http://stackoverflow.com/q/16456371/2277645我編輯過 – 2013-05-09 07:25:39