2013-04-10 135 views
0

我第一次使用wait和notify()方法,我嘗試了這種方式。等待,並通知條件Java

示例代碼

public class Tester 
{ 
static boolean closing == false; 
static int n; 
DateTime dt = new DateTime(); 
int getMin = dt.getMinuteOfDay(); //minute of the day 
int tempMin = dt.getMinuteOfDay()+5;// minute of the day + 5 minutes 

public static void setClosing(boolean b) 
{ 
    closing = b;   
} 

public static int getN() 
{ 
    return n; 
} 

class notifier extends Thread 
{ 
    public void run() 
    { 
     synchronized(this) 
     { 
      while(getMin == tempMin || closing == true) 
      { 
       notify(); 
      } 
     } 
    } 
} 

public void starter() throws InterruptedException 
{   
    notifier nn = new notifier(); 
    while(n==1) 
    { 
     notify.start(); 
     if(closing == false) 
     { 
      synchronized(notify) 
      { 
       nn.wait(); 
       mailreader(); 
       getMin = getMin+5; 
       tempMin = tempMin+5; 
      } 
     } 
     else 
     { 
      n=2; 
     } 
    } 
} 
} 

主類

public class Tester2 extends WindowAdapter 
{ 
public Tester2() 
{   
    frame = new JFrame(); 
    frame.addWindowListener(this); 
    frame.setVisible(true); 
    Tester t = new Tester(); 
    t.starter(); 
} 

@Override 
public void windowClosing(WindowEvent e) 
{ 
    Tester.setClosing(true); 
    while(Tester.getN() != 2) 
    { 
     //wait 
    } 
    frame.dispose();   
} 

public static void main(String args[]) 
{ 
    Tester2 t = new Tester2();   
}  
} 

我打電話郵件閱讀()方法爲每5分鐘執行一些任務,但

當用戶關閉的JFrame的

正在關閉設置爲從主類真正我想出來的while循環中通知人類。

我想在這裏做的是,當用戶關閉JFrame時,我不想讓mailreader()在中間停止並退出,而是我希望JFrame等到方法結束後再執行關閉或如果它是等待模式(通知類),我想出來它並退出

回答

1

如果你想要做的是有東西定期運行在後臺線程,然後取消有序的方式,當應用程序關閉,你不需要這一切。相反,您可以創建一個Runnable,它可以循環,休眠和進行郵件閱讀,當它中斷時退出(Runnable可以控制何時處理中斷,因此它不在中間)。一旦你開始線程,讓GUI保持一個引用,以便它可以在關閉時調用中斷。

這是an example of how to cancel a thread using interrupt