java 程序无法关闭窗口!用dispose()无效

packageQQ;importjava.awt.BorderLayout;importjava.awt.Dimension;importjavax.swing.*;im... package QQ;

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;
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...");//创建一个标示(用于显示进度文字的显示)

JFrame 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);
dispose();
}

}
}

}
展开
 我来答
is8888
2009-11-08 · TA获得超过695个赞
知道小有建树答主
回答量:530
采纳率:0%
帮助的人:570万
展开全部
改成这样,你看看:

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();
}

}
}

}
hanzsim
推荐于2018-04-05 · TA获得超过1540个赞
知道小有建树答主
回答量:922
采纳率:0%
帮助的人:1097万
展开全部
一楼的应该是有效的。但没有解决本质问题。
问题出在你的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);//关闭有效
轻松搞定!
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式