java 程序无法关闭窗口!用dispose()无效
作者&投稿:禽张 (若有异议请与网页底部的电邮联系)
前面不用加this.
你应该是弹出窗体之后才关闭窗体。
意思就是先调用新窗体的方法,后面写dispose();
这样就直接关闭原窗体了。
望采纳。
给点建议:
public void show(boolean b)
已过时。 从 JDK version 1.1 开始,由 setVisible(boolean) 取代。
public void hide()
已过时。 从 JDK 5 开始,由 Component.setVisible(boolean) 取代。
换一下看行不.
import java.awt.BorderLayout;
import java.awt.Dimension;
import javax.swing.*;
import java.awt.event.*;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import javax.xml.ws.Dispatch;
public class Progress_bar extends JFrame implements ActionListener
{
private static final long serialVersionUID = -2543187469376323631L;
//ActionListener ,ChangeListener是 2个实现进度条的 接口
private JPanel panel;
private Timer timer;
private JButton btn;
private JProgressBar pgb;
private JLabel label;
JFrame frame;
public void init()
{
panel = new JPanel();
btn = new JButton("start");
btn.addActionListener(this);
panel.add (btn,BorderLayout.CENTER);
timer = new Timer(1,this);//控制进度条速度
pgb = new JProgressBar();//可视化进度条(显示进度条)
pgb.setOrientation (JProgressBar.HORIZONTAL);
pgb.setMaximum (100);//显示已完成多少(到多少)
pgb.setMinimum (0);//显示已完成多少(从多少开始)
pgb.setValue (0);//将进度条的当前值设置为 0
pgb.setStringPainted (true);//设置 stringPainted 属性的值,
//该属性确定进度条是否应该呈现进度字符串。
pgb.setPreferredSize (new Dimension(400,80));
//Dimension 类封装单个对象中组件的宽度和高度(好像没什么 用)
label = new JLabel("正在启动QQ...");//创建一个标示(用于显示进度文字的显示)
frame = new JFrame("test");
frame.add (panel,BorderLayout.SOUTH);
frame.add (pgb,BorderLayout.CENTER);
frame.add (label,BorderLayout.NORTH);
frame.setBounds(450, 300, 350, 100);//设置窗体长和宽
frame.setVisible (true);//显示窗体
frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);//关闭有效
}
public static void main(String args[])
{
new Progress_bar().init (); //执行 程序
}
public void actionPerformed(ActionEvent e)
{
if(e.getSource ()==btn)
{
timer.start ();
}
if(e.getSource ()==timer)
{
int value = pgb.getValue () ;
if(value<100)
{
value++;
pgb.setValue (value);
}
if(value ==100)
{
timer.stop ();
pgb.setValue (0);
frame.setVisible(false);
frame.dispose();
}
}
}
}
一楼的应该是有效的。但没有解决本质问题。
问题出在你的GUI程序架构上。你的程序主类已经是JFrame子类了,那么它的实例就是一个JFrame,为什么还要再new一个JFrame作为程序界面呢?在main函数中,new你的主类,就是new了Frame,直接用主类此实例做程序界面即可!
所以,init中的代码应该是这样:
//JFrame frame = new JFrame("test");这行不要了
add (panel,BorderLayout.SOUTH);
add (pgb,BorderLayout.CENTER);
add (label,BorderLayout.NORTH);
setBounds(450, 300, 350, 100);//设置窗体长和宽
setVisible (true);//显示窗体
setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);//关闭有效
轻松搞定!
农爬卫可: 给点建议: public void show(boolean b) 已过时. 从 JDK version 1.1 开始,由 setVisible(boolean) 取代. public void hide() 已过时. 从 JDK 5 开始,由 Component.setVisible(boolean) 取代. 换一下看行不.
岳西县17615899791: java中要关闭窗口不退出程序 但用this.dispose();为什么没有反应啊????急!!!! - ?
农爬卫可: this.dispose()是指当前类的实例,如果你用在内部类中,效果是卸载当前类实例.你应该使用窗口类的类名.this.dispose()
岳西县17615899791: java中关闭当前窗口用什么代码 - ?
农爬卫可: dispose public void dispose() 释放由此 Window、其子组件及其拥有的所有子组件所使用的所有本机屏幕资源.即这些 Component 的资源将被破坏,它们使用的所有内存都将返回到操作系统,并将它们标记为不可显示. 通过随后调用 pack 或 show 重新构造本机资源,可以再次显示 Window 及其子组件.重新创建的 Window 及其子组件的状态与释放 Window 时这些对象的状态一致(不考虑这些操作之间的其他更改).
岳西县17615899791: JAVA单击事件如何关闭当前窗口 - ?
农爬卫可: 只能用dispose释放当前窗口、比如this.dispose(); 不能用System.exit(0)\因为这样会关闭JVM中所有的资源,也就是关闭所有界面,等于结束当前程序.
岳西县17615899791: 用java生成的窗口不能关闭 - ?
农爬卫可: windowClose() 是在window已经被关闭的情况下才被调用的,1)你可以把System.exit()放到windowClosing()里面, 或者2)jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
岳西县17615899791: java窗口关闭问题,急死 急死 急死了 - ?
农爬卫可: 可以用dispose()方法public void dispose() 释放由此 Window、其子组件及其拥有的所有子组件所使用的所有本机屏幕资源.即这些 Component 的资源将被破坏,它们使用的所有内存都将返回到操作系统,并将它们标记为不可显示.
岳西县17615899791: JAVA应用程序窗口关闭 不能关闭窗口 哪位大侠解释一下???!!! - ?
农爬卫可: 1.WindowClosing的W小写2.在 System.exit(0);上面加上setVisible (false);
岳西县17615899791: JAVA运行的窗口关不上,怎么解决 - ?
农爬卫可: frm.addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent e) { System.exit(0); } }); 添加窗口监听器,还有推荐使用对应的Adapter比较好,因为实现接口的话要实现所有方法,Adapter实现了对应监听器接口的所有方法,只是方法体内为空,只需要调用需要的方法即可.
岳西县17615899791: java 编出来的窗口没有办法关闭 - ?
农爬卫可: 在main方法最后加上这一句,添加Frame f的监听:f.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e) { System.exit(0); } });
岳西县17615899791: 为什么用windowClosing关闭不了java窗口?代码如下 - ?
农爬卫可: this.dispose();