我有一个java应用程序,可以在JTabbedPane上加载和显示applet。基本上GUI就是:
Applet - > JPanel(AppletStub) - > JPanel - > JTabbedPane - >的JFrame
我已将此标准行放在JFrame类中:
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
这是我在JFrame类中的方法,它应该在窗口关闭时被调用:
addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
setVisible(false);
tabbedPane.stopAllApplets();
dispose();
super.windowClosed(e);
}
});
然后,在我的Tabbed Pane类中,我有一个管理Applet的arrayList:
ArrayList<PanelHolder> games = new ArrayList<>();
我循环遍历JPanels的ArrayList:
public void stopAllApplets(){
for (int i = 0; i < games.size(); i++) {
games.get(i).stopGame();
}
}
JPanel类中的stopGame()方法非常简单:
public void stopGame(){
game.stop();
}
然后在实现AppletStub的JPanel类中,这是stop()方法:
public void stop() {
if (applet != null) {
applet.stop();
applet.destroy();
applet = null;
}
}
但是,每当我关闭applet时,JVM都会继续运行并占用系统资源。我正在使用BootLoader来启动带有参数的JVM:
javaw -Xbootclasspath/p:"/C:/Users/Username/Documents/NetBeansProjects/Game/build/classes/" -cp "." main.Main
这是我的任务经理在运行几次后最终看起来的样子:
我显然没有正确关闭我的申请,有什么建议吗?
答案 0 :(得分:0)
将此添加到您的框架代码中:
setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
默认情况下,它是WindowConstants.DO_NOTHING_ON_CLOSE