程序进度条无反应,求解答

开发者10086 2023-08-20 14:19:11
import java.awt.*;
import javax.swing.*;
public class ThreadTest extends JFrame{
	JProgressBar jpb = new JProgressBar(0, 100);
	JLabel j1 = new JLabel("正在下载"),j2 = new JLabel();
	Thread th = new Thread(new InClass());
	Font f = new Font("微软雅黑", Font.PLAIN, 12);
	Container c = getContentPane();
	public void init() {
		jpb.setFont(f);
		j1.setFont(f);
		j2.setFont(f);
		th.start();
		c.add(j1,"North");
		c.add(j2,"Center");
		c.add(jpb,"South");
		
		setVisible(true);
		setSize(250,150);
		setLocation(150, 100);
		setTitle("下载");
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		setResizable(false);
	}
	class InClass implements Runnable{
		int count = 0;
		@Override
		public void run() {
			try {
				Thread.sleep(100);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
			count++;
			jpb.setValue(count);
			j2.setText("已完成:" + jpb.getValue() + "%");
			if (jpb.getValue() == 100) {
				JOptionPane.showMessageDialog(ThreadTest.this, "下载完成","提示", JOptionPane.QUESTION_MESSAGE);
				System.exit(0);
			}
			c.add(j1,"North");
			c.add(j2,"Center");
			c.add(jpb,"South");
			c.validate();
		}
	}
	public static void main(String[] args) {
		new ThreadTest().init();
	}
}

进度条无反应,不知道哪里出了异常

...全文
96 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
原子星 2023-11-15
  • 打赏
  • 举报
回复

子线程不能直接调用界面元素,可以使用java.awt.EventQueue.invokeLater或者SwingUtilities.invokeLater去设置界面元素的属性进行界面刷新,或者使用消息机制,把数据发送给主线程进行界面组件属性的修改操作。

压力无限大 2023-08-20
  • 打赏
  • 举报
回复

不要在子线程里面进行界面修改,界面修改应该使用Message 对象发到主线程去修改

258,170

社区成员

发帖
与我相关
我的任务
社区描述
java领域交流社区,旨在为大家提供一个文明交流,互相探讨兴趣爱好的环境,欢迎各位大佬加入。
java 个人社区 广东省·深圳市
社区管理员
  • 桃花键神
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧