重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
你用的 swing 吗?加上 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
创新互联公司专注于企业成都营销网站建设、网站重做改版、德兴网站定制设计、自适应品牌网站建设、成都h5网站建设、商城网站制作、集团公司官网建设、外贸网站制作、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为德兴等各大城市提供网站开发制作服务。
或者加上窗口事件监听器:
addWindowListener(new WindowAdapter() {
public void windowClosing (WindowEvent we) {
dispose();
}
});
可你个例子,参考下!~
其实你说的关闭旧窗口,就是隐藏了,使其看不见吧。下面给出一个例子,有问题百度Hi我!~
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class TanChuShiJian extends JFrame implements ActionListener {
public TanChuShiJian() {
// TODO Auto-generated constructor stub
Container c = getContentPane();
c.setLayout(null);
JButton b = new JButton("测试");
b.addActionListener(this); //为按钮添加事件
b.setBounds(10, 10, 150, 30);
c.add(b);
setSize(400, 400);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
if("测试".equals(e.getActionCommand())) {
new NewFrame();
setVisible(false);
}
}
public static void main(String[] args) {
new TanChuShiJian();
}
}
class NewFrame extends JFrame {
public NewFrame() {
// TODO Auto-generated constructor stub
Container c = getContentPane();
JPanel p = new JPanel();
p.add(new JLabel("我是新窗口!"));
c.add(p);
setSize(200, 300);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
根据Java的垃圾回收机制:垃圾回收回收的是无任何引用的对象占据的内存空间
所以你只要采用匿名类创建打开的窗口并调用System.gc() 或Runtime.getRuntime().gc() 就可以啦
在要创建窗口的地方这样写:
new frame().setVisible(true);
System.gc() ;
当你再次打开同样的窗口时,又会执行new frame().setVisible();重新创建一个新的窗口,原来的自然就变成无任何引用的对象了,随即就会被JVM垃圾回收机制回收掉了
注意:调用System.gc()用于显式通知JVM可以进行一次垃圾回收,但真正垃圾回收机制具体在什么时间点开始发生动作是不可预料的