多线程更新Jtable时报错,求助

wumingbing_8027 2012-11-14 03:26:08
AbstractTableModel.fireTableStructureChanged();
在其它线程,不是主线程调用,但不这一句报的错,应该JTable后台线程报出来的,无法通过try catch捕获
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 4 >= 4
at java.util.Vector.elementAt(Unknown Source)
at javax.swing.table.DefaultTableColumnModel.getColumn(Unknown Source)
at javax.swing.plaf.basic.BasicTableUI.paintGrid(Unknown Source)
at javax.swing.plaf.basic.BasicTableUI.paint(Unknown Source)
at javax.swing.plaf.ComponentUI.update(Unknown Source)
at javax.swing.JComponent.paintComponent(Unknown Source)
at javax.swing.JComponent.paint(Unknown Source)
at javax.swing.JComponent.paintToOffscreen(Unknown Source)
at javax.swing.BufferStrategyPaintManager.paint(Unknown Source)
at javax.swing.RepaintManager.paint(Unknown Source)
at javax.swing.JComponent._paintImmediately(Unknown Source)
at javax.swing.JComponent.paintImmediately(Unknown Source)
at javax.swing.RepaintManager.paintDirtyRegions(Unknown Source)
at javax.swing.RepaintManager.paintDirtyRegions(Unknown Source)
at javax.swing.RepaintManager.seqPaintDirtyRegions(Unknown Source)
at javax.swing.SystemEventQueueUtilities$ComponentWorkRequest.run(Unknown Source)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
...全文
498 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
hello在么 2014-07-28
  • 打赏
  • 举报
回复
不知qq多少 我也遇到类似的问题了 我的jtable要求是实时更新 放在一个线程中直接用 model = new DefaultTableModel(data, names); table.setModel(model); 每次都会报异常
wkxianyun 2013-02-22
  • 打赏
  • 举报
回复
楼上正解,非常感谢 我的修改了一下楼上的程序 if (SwingUtilities.isEventDispatchThread()) { //AWT指派线程 //...这里更新Jtable jtable.setModel(tableModel)); } 其中else后面的删除掉了,因为我更新table是单独的函数,在线程中调用这个函数。因此else后边的代码在我的程序中不能用。
bigfive 2013-01-05
  • 打赏
  • 举报
回复
这样试试: @Override public void run() { if (SwingUtilities.isEventDispatchThread()) { //AWT指派线程 //...这里更新Jtable jtable.setDataSouse(psf.getSendinfo()); }else { SwingUtilities.invokeLater(this); } }
wumingbing_8027 2012-11-15
  • 打赏
  • 举报
回复
谢谢了。第一次用桌面的东西,太多东西不明白了,都被C#误导了
MiceRice 2012-11-15
  • 打赏
  • 举报
回复
引用 7 楼 wumingbing_8027 的回复:
是在timer中修改的,有什么办法实现么,主要是用来显示多线程的信息
建议改为让Timer调用GUI主线程来更新数据。 SwingUtilities.invokeLater(Runnable doRun) 或者: SwingUtilities.invokeAndWait(Runnable doRun)
wumingbing_8027 2012-11-15
  • 打赏
  • 举报
回复
是在timer中修改的,有什么办法实现么,主要是用来显示多线程的信息
MiceRice 2012-11-14
  • 打赏
  • 举报
回复
引用 5 楼 wumingbing_8027 的回复:
我已经把数据模型,放在了psf.getSendinfo()里面啊,更新界面的就是timer
关键是,JTable所使用数据模型,是否就是你其它线程所直接修改的?如果是,就必然会面临此类风险。
wumingbing_8027 2012-11-14
  • 打赏
  • 举报
回复
引用 4 楼 ldh911 的回复:
估摸着是同步没控制好,你某线程在改数据模型内容的时候,GUI线程在让JTable更新界面。 考虑线程所修改的数据模型,应该独立出来一份,修改OK了,再让GUI线程切换过去用。
我已经把数据模型,放在了psf.getSendinfo()里面啊,更新界面的就是timer
MiceRice 2012-11-14
  • 打赏
  • 举报
回复
估摸着是同步没控制好,你某线程在改数据模型内容的时候,GUI线程在让JTable更新界面。 考虑线程所修改的数据模型,应该独立出来一份,修改OK了,再让GUI线程切换过去用。
wumingbing_8027 2012-11-14
  • 打赏
  • 举报
回复
我设置一个timer,jtable.setDataSouse(psf.getSendinfo()); public synchronized void setDataSouse(Collection<Object> vsourse) { tm.fireTableStructureChanged(); list.clear(); this.sourse = vsourse; List<String> rec_List = null; Class<?> c = null; String value = null; for (Object o : sourse) { ..... list.add(rec_List); } // tm.fireTableStructureChanged(); if (jt.getRowCount() > 0) jt.setRowSelectionInterval(jt.getRowCount() - 1, jt.getRowCount() - 1); }
wumingbing_8027 2012-11-14
  • 打赏
  • 举报
回复
这不是我的代码报的错,应该是jtable的使用方式的问题
suciver 2012-11-14
  • 打赏
  • 举报
回复
数组越界了啊
内容概要:本文提出了一种基于粒子群优化算法(PSO)的风光储能微电网日前经济调度模型,创新性地引入需求响应机制,以实现系统运行成本最小化为目标。该模型综合考虑风力发电、光伏发电、储能系统及可调节负荷的运行特性,构建了包含电力供需平衡、设备出力能力、储能容量约束在内的完整数学模型,并通过Python编程实现PSO算法求解,有效提升了新能源消纳水平并降低了购电成本与运行费用。研究不仅实现了多能源协调优化调度,还为高比例可再生能源接入背景下的微电网经济运行提供了可行的技术路径。; 适合人群:具备一定电力系统基础知识和Python编程能力的科研人员、研究生及从事新能源微电网优化调度相关工作的工程技术人员。; 使用场景及目标:①研究含高比例可再生能源的微电网经济调度问题;②掌握粒子群算法在电力系统优化中的建模与应用方法;③开展计及需求响应的多能源协同调度仿真分析,探索用户侧灵活性资源参与系统优化的潜力。; 阅读建议:建议读者结合提供的Python代码深入理解算法实现细节,重点关注目标函数构建、约束条件处理及PSO参数设置,可进一步拓展至其他智能优化算法对比分析,或引入碳排放、电压稳定性等多目标优化维度进行深化研究。

62,622

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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