2017-07-20 107 views
0

我有一個按鈕,配置了一個動作偵聽器,它可以重新打開一個框架。如果我物理地點擊按鈕,按預期工作,框架關閉,同樣的一個再次打開。doClick()沒有配置框架

我也有這個動作與一個定時器中的doClick()聯繫起來。當行動發生時,它會打開一個新的框架而不處理另一個框架。計時器本身完美工作。

這是什麼原因以及如何解決?定時器有問題還是通過doClick調用它?

我對這一切都比較陌生,所以這可能是一個簡單的問題。由於

按鈕代碼:

frmStart s = new frmStart(); 
     s.setVisible(true); 
     this.dispose(); 

doClick代碼(變化布爾):

Timer t = new Timer(); 
t.schedule(new TimerTask() { 

     @Override 
     public void run() { 
      if(change) { 
      btnReload.doClick(); 
      } 

     } 
    }, 400); 
+0

你有沒有打過't.start();'? – CraigR8806

+0

我正在使用util.Timer。這並不意味着我不需要一個。計時器正常工作。這不是按鈕操作。 –

+0

只是一個預感,但在處理Swing對象時,如果使用'javax.swing.Timer',則會更好一些嘗試切換到該對象,然後在定義了功能之後調用't.start()' – CraigR8806

回答

0

隨着你提供什麼,我最好的猜測是有你切換你Timer進口從util.Timerjavax.swing.Timer

然後你會像這樣實例化它:

Timer t = new Timer(400, (e)->{ 
    if(change) 
     btnReload.doClick(); 
}); 

然後啓動

t.start(); 

這不是一個好主意,有時甚至不會工作,與Swing線程之外的揮杆對象進行交互。當使用javax.swing.Timer時,它將在Swing Thread中運行已定義的功能

0

Dispose不會終止幀。報價:

釋放此窗口,其 子組件及其所有子級使用的所有本機屏幕資源。也就是說,這些組件的資源 將被銷燬,它們消耗的任何內存將返回到操作系統,並且它們將被標記爲不可顯示。

框架本身是活着的,直到GC啓動。而GC沒有做任何事,因爲定時器仍然活動。所以你應該放棄幀,然後取消定時器。

+0

尋求幫助,但它似乎並沒有爲我工作。我已將按鈕動作更改爲: frmStart s = new frmStart(); s.setVisible(true); this.dispose(); t.cancel(); 但原來的jframe仍然保持開放。 –