java 程序无法关闭窗口!用dispose()无效
发布网友
发布时间:2022-05-05 06:40
我来回答
共2个回答
热心网友
时间:2023-10-13 11:12
改成这样,你看看:
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();
}
}
}
}
热心网友
时间:2023-10-13 11:12
一楼的应该是有效的。但没有解决本质问题。
问题出在你的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);//关闭有效
轻松搞定!