2017-07-03 90 views
1

我使用的是庫方法它創建,顯示和返回一個JFrame:當我打電話setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE)返回框架的JFrame:setDefaultCloseOperation沒有效果

public JFrame displayChart() { 
    final JFrame frame = new JFrame(windowTitle); 
    javax.swing.SwingUtilities.invokeLater(new Runnable() { 
    ... 
    frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 
    ... 
    frame.pack(); 
    frame.setVisible(true); 
    } 
    return frame; 
} 

,它不似乎有任何影響。

如何更改其創建不受您控制的框架的關閉操作?

+0

你期望什麼效果? –

+0

當我點擊關閉按鈕時,窗口關閉而不是保持打開狀態。 – Josef

+0

您必須創建一個呼叫才能關閉框架。喜歡的東西this.dispose –

回答

3

看起來像一個競爭條件。如果您只是在返回的幀上調用set,那麼 - 稍後 - 它們的invokeLater將執行,覆蓋您的更改。

把你改變成另一種invokeLater

public void yourMethod() { 
    JFrame frame = framework.displayChart(); 
    javax.swing.SwingUtilities.invokeLater(new Runnable() { 
     frame.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE); 
    } 
} 

搖擺將按順序執行它們,意味着你進入最後。

0

您可以覆蓋該方法並更改框架的創建。 如果你想框,當你按下然後紅色的按鈕來更改

「WindowConstants.DO_NOTHING_ON_CLOSE」與「WindowConstants.EXIT_ON_CLOSE」 如果使用WindowConstants.DO_NOTHING_ON_CLOSE不會有任何影響的得到關閉甚至在點擊紅色按鈕之後,jFame即可。

或者如果你的程序可能會被關閉,那麼它不會有任何影響。

+0

如果他使用WindowConstants.DO_NOTHING_ON_CLOSE,那麼框架如何關閉,我已經使用了很多次 – Steve