文档章节

Java图形用户界面swing假死卡死问题和JTable动态刷新问题的解决方案

o
 osc_2wznp7fr
发布于 07/01 16:11
字数 421
阅读 51
收藏 0

精选30+云产品,助力企业轻松上云!>>>

发现问题

JTable动态刷新直到最后一次才刷新出来
swing界面在刷新过程中被卡住无法点击

所在项目

进程调度模拟

问题代码

点击“开始”后执行

private void button2ActionPerformed(ActionEvent e) {
   // TODO add your code here
   //执行进程
    select = comboBox1.getSelectedIndex();
    renewThread.start();
    switch (select) {
        case 0: {
            processScheduling.FCFS();
            break;
        }
        case 1: {
            processScheduling.SPF();
            break;
        }
    }
}
 

刷新一次(取出数据放入JTable)

    public void renewJTable4() {
    	//取出正在动态变化中的数据
        List<PCB> list = processScheduling.getFCFSPcb();
        //更新表格  
        DefaultTableModel tableModel = ((DefaultTableModel) table4.getModel());
        tableModel.getDataVector().clear();
        for (PCB pcb : list) {
            tableModel.addRow(pcb.toArray());
            //System.out.println(pcb.toString());
        }
    }

创建线程刷新界面

    public class RenewThread extends Thread {
        @Override
        public void run() {
            try {
                while (true) {
                    sleep(ToolForSch.renewTime);
                    renewAll();//刷新所有表格
                    //System.out.println("刷新一次");
                }
            } catch (Exception ex) {
                ex.printStackTrace();
            }
        }
    }

失败运行截图

刷新过程截图(界面卡死)
在这里插入图片描述
刷新完成截图(运行到最后才显示出结果)
在这里插入图片描述


分析问题

发现swing界面是单线程的,一次只能有一个组件响应,一旦监听事件需要执行很久,则会发生界面的卡死,刷新也就徒劳。于是发生了当执行完毕后界面才刷新成功的情况。

解决方案

我们可以将执行的方法放在一个线程中执行,与swing界面的线程并行,这样界面就不会被锁

更换代码

只需套上一个线程“外套”

    private void button2ActionPerformed(ActionEvent e) {
        // TODO add your code here
        //执行进程
        new Thread(()->{
            select = comboBox1.getSelectedIndex();
            //renewThread.start();
            switch (select) {
                case 0: {
                    processScheduling.FCFS();
                    break;
                }
                case 1: {
                    processScheduling.SPF();
                    break;
                }
            }
        }).start();
    }

成功运行截图

此时界面实现了动态刷新
成功截图
如果对您有帮助,左下角点个赞

o
粉丝 0
博文 58
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。

暂无文章

SequoiaDB监控与开发实践分析

使用背景 公司近期上线了一个新应用,底层数据库采用了国产的分布式数据库 – SequoiaDB。 因为需要将 SequoiaDB 集群纳入到公司的整个监控体系中,所以需要对 SequoiaDB 的状态、性能指标等...

巨杉数据库
20分钟前
6
0
如何导入其他Python文件? - How to import other Python files?

问题: How do I import other files in Python? 如何在Python中导入其他文件? How exactly can I import a specific python file like import file.py ? 我究竟该如何导入特定的python文件......

fyin1314
28分钟前
14
0
小程序上传图片 返回的地址出现回车空格问题

不知怎么回事 ,今天写小程序上传图片 之前是没问题的,今天突然出现很多回车空格问题 那怎么办呢,处理呗 //去掉空格str = str.replace(/\ +/g,""); console.log(str);//"{'retmsg':'suc......

子枫Eric
39分钟前
6
0
Spring Boot + Spring Security自定义用户认证

自定义认证过程 自定义认证的过程需要实现Spring Security提供的UserDetailService接口 ,源码如下: public interface UserDetailsService { UserDetails loadUserByUsername(String use...

心田已荒
今天
12
0
DateTime2与SQL Server中的DateTime - DateTime2 vs DateTime in SQL Server

问题: Which one: 哪一个: datetime datetime2 is the recommended way to store date and time in SQL Server 2008+? 是在SQL Server 2008+中存储日期和时间的推荐方法吗? I'm aware of......

富含淀粉
今天
13
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部