java dispose不起作用
前面不用加this.
你应该是弹出窗体之后才关闭窗体。
意思就是先调用新窗体的方法,后面写dispose();
这样就直接关闭原窗体了。
望采纳。
改成这样,你看看:
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();
}
}
}
}
closeBtn.addActionListener(this);
一句
this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);加在构造方法里
if(e.getSource()==closeBtn){
System.exit(0);
}
因为你没给按钮加监听
易志氟米: this.dispose()是指当前类的实例,如果你用在内部类中,效果是卸载当前类实例.你应该使用窗口类的类名.this.dispose()
荔湾区18394979045: (Java)dispose()函数有时关闭不了窗口 - ?
易志氟米: 给点建议: public void show(boolean b) 已过时. 从 JDK version 1.1 开始,由 setVisible(boolean) 取代. public void hide() 已过时. 从 JDK 5 开始,由 Component.setVisible(boolean) 取代. 换一下看行不.
荔湾区18394979045: java dispose()方法为什么会报错?
易志氟米: class CCFrame extends JFrame { private JButton btn = new JButton("弹出新窗口"); public CCFrame() { setSize(500,300); setLocationRelativeTo(null); setVisible(true); setDefaultCloseOperation(DISPOSE_ON_CLOSE); setLayout(new ...
荔湾区18394979045: java struts2中动态 ${nextDispose}报错 - ?
易志氟米: 0 首先配置没有格式错误.1 确认各配置参数正确.2 debug确认进入了指定的login方法,并给nextDispose赋值,进入正确的result( return success)
荔湾区18394979045: eclipse里Debug设置断点不起作用是怎么回事 - ?
易志氟米: 您好,遇到这种问题可能会有一下几种情况: 1>没有指定Debug工程.点击Link Souce指定到对应的工程即可. 2>class文件与代码不同步.清空工程.重新编译工程. 3>如果项目都打了JAR包.就用ant编译下.清空下生成的JAR生成新的JAR包.
荔湾区18394979045: java swing 有没有谁出现过JDialog调用setvisible(false)或者dispose(),但还是不会消失的情况,怎么解决的 - ?
易志氟米: 这个dispose不就是可以使该swing线程死掉,而setVisible(false)只是把隐藏窗口线程而已
荔湾区18394979045: JAVA 程序 没错误 就是运行结果出不来,望各位高手帮小弟找找那出问题了,谢谢! - ?
易志氟米: 构造方法中窗体属性设置错了f.setVisible(true);f.setSize(400,300);f.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);因为你的...
荔湾区18394979045: java事件内部实现时没有this.dispose()方法?谢谢了,大神帮忙啊 - ?
易志氟米: dispose();不是ActionListener的方法,你在匿名内部类中用this调用就是用这个当前的内部类对象调用dispose();的方法.我估计dispose();是你主类的方法.应该这样调用 button.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ 外部类的类名.this.dispose(); Zhujiemian zhu=new Zhujiemian(); zhu.setVisible(true); } }); 求采纳
荔湾区18394979045: java中dispose()如何使用 - ?
易志氟米: 释放由此 Window、其子组件及其拥有的所有子组件所使用的所有本机屏幕资源.即这些 Component 的资源将被破坏,它们使用的所有内存都将返回到操作系统,并将它们标记为不可显示. 通过随后调用 pack 或 show 重新构造本机资源,可以再次显示 Window 及其子组件.重新创建的 Window 及其子组件的状态与释放 Window 时这些对象的状态一致(不考虑这些操作之间的其他更改).
荔湾区18394979045: java编程中graphics为什么要用后要马上dispose - ?
易志氟米: Java编程中的graphics中的dispose方法是 java.awt.Windows类的方法,它的作用是销毁程序中指定的图形界面资源,如果在使用了graphics获得windows一些图形资源,而不进行关闭的话,由于后期多人使用就会造成内存溢出的情况的,导致程序卡死. dispose方法类似java 连接数据库时使用conn.close方法,也是为了关闭数据库连接资源.