我似乎有一个相当独特的问题,我在这里搜索了一段时间没有找到答案。我有一个类,它有一个带有两个按钮的简单JFrame。每个按钮调用不同类的Main方法,如下:
checkRuling = new JButton("Check Your Deck's Rulings");
checkRuling.addActionListener(new ActionListener() {
public void actionPerformed (ActionEvent e) {
ReadHtmlCardDatabase.main(null);
}
});
一个调用一个类,它将一系列输入带入文本字段,并从输入创建一个格式化的html文档,另一个将html文档加载到JEditorPane中。我的问题是,当我关闭子类的一个JFrame(输入或html加载器之一)时,它完全退出我的程序,并且我想保持主类(使用两个按钮)打开。我尝试过使用:
close = new JButton("CLOSE");
close.addActionListener(new ActionListener() {
public void actionPerformed (ActionEvent e) {
System.exit(1);
}
});
在子类中的按钮上,无济于事。单击按钮时,它只会退出所有内容。我也尝试过使用:
JFrame.DISPOSE_ON_EXIT
对于子类,但是这会导致JFrames在没有子类实际关闭的情况下消失,因此保存html文档的第一个实际上从未实际保存它,并且打开相同html文档的第二个子类赢得了#t; t工作,因为它没有得到保存。任何帮助将不胜感激,因为我无法弄清楚如何做到这一点。
答案 0 :(得分:0)
正如Fast Snail在评论中所说,你不应该调用主要方法。实例化一个完成每个功能的类。开始使用时,使用setVisible(true)
将框架设置为可见,然后在完成后setVisible(false)
。因此,在动作侦听器中,只需更改可见性。
然后,假设你没有任何过于狂野的事情,那么你设置为隐形的框架应该超出范围并获得释放,这样内存就不会被扯掉。您只需在每次需要时实例化ReadHtmlCardDatabase
类的新副本。或者您可以根据需要设置一个可见/不可见的静态副本。
答案 1 :(得分:0)
其中一个JFrame
您应该只在GUI中使用一个JFrame。对于其他窗口,您可以使用例如JDialog或JWindow。
这应该有所帮助,如果不是你可以随时使用frame.setVisible(false)
而不是近距离处置,但它不是很整洁。
答案 2 :(得分:0)
感谢发表评论然后将其删除的人,我已经找到了自己的问题。我只需用这个替换我的主要电话:
setDeck = new JButton("Set Deck");
setDeck.addActionListener(new ActionListener() {
public void actionPerformed (ActionEvent e) {
WriteHtmlCardDatabase w = new WriteHtmlCardDatabase();
w.main(null);
}
});
谢谢!