这不是我的代码报的错,应该是jtable的使用方式的问题
解决方案 »
- Joup解析
- 拼接字符串的问题,有知道的麻烦写下
- Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
- 请教个基础问题
- 关于使用log4j过程中继承AppenderSkeleton时参数的问题
- AprLifecycleListener
- 关于switch语句执行结果
- 怎么打jar包
- 60分相送:如何使用Java语言实现在Windows 98任务栏中加入图标
- 告诉我tostring 函数什么用途我们感到阿!谢谢了一个初学者!
- 求对角线元素之和出现数组越界 求解决.
- cmd运行java时出现NoClassDefFoundError错误是什么原因
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);
}
关键是,JTable所使用数据模型,是否就是你其它线程所直接修改的?如果是,就必然会面临此类风险。
建议改为让Timer调用GUI主线程来更新数据。
SwingUtilities.invokeLater(Runnable doRun)
或者:
SwingUtilities.invokeAndWait(Runnable doRun)
@Override
public void run() {
if (SwingUtilities.isEventDispatchThread()) { //AWT指派线程
//...这里更新Jtable
jtable.setDataSouse(psf.getSendinfo());
}else {
SwingUtilities.invokeLater(this);
}
}
if (SwingUtilities.isEventDispatchThread()) { //AWT指派线程
//...这里更新Jtable
jtable.setModel(tableModel));
}其中else后面的删除掉了,因为我更新table是单独的函数,在线程中调用这个函数。因此else后边的代码在我的程序中不能用。
model = new DefaultTableModel(data, names);
table.setModel(model);
每次都会报异常