JFrame:setDefaultCloseOperation无效

时间:2017-07-03 11:08:04

标签: java swing

我使用库方法创建,显示和返回JFrame:

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;
}

当我在退回的框架上调用setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE) 时,它似乎没有任何效果。

如何更改创建不受您控制的帧的关闭操作?

2 个答案:

答案 0 :(得分:3)

看起来像竞争条件。如果您只是在返回的框架上调用set,那么 - 稍后 - 他们的invokeLater将会执行,从而覆盖您的更改。

将您的更改放入另一个invokeLater

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

Swing将按顺序执行它们,这意味着你的最后一次。

答案 1 :(得分:0)

您可以覆盖该方法并更改框架的创建。 如果您想在按下红色按钮时关闭框架,请更改

带有“WindowConstants.EXIT_ON_CLOSE”的“WindowConstants.DO_NOTHING_ON_CLOSE” 如果使用WindowConstants.DO_NOTHING_ON_CLOSE,即使单击红色按钮,也不会对jFame产生任何影响。

或者如果您的程序可能会被关闭,那么它将不会产生任何影响。