2017-07-03 88 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