当加载了applet的页面时,JTable对象的内容完美呈现。当我关闭一个标签并重新打开它在内容中设置的内容时,但是当我通过setValeAt()
表更改的内容变空时。当我从数据模型中删除所有html标签时,一切正常。我没有做任何与表的默认渲染器只实现数据模型。所有的值都通过setValeAt()
设置,它的工作原理(我检查了它)。 有人可以知道什么可能是错的?JTable不渲染
这里是示例代码重现错误。运行applet(值将会更改),然后关闭选项卡(不是浏览器)并重新打开它。我在Linux和Windows XP上的Firefox 3.6.13和Java 1.6.0_22-b04上进行了测试。它的行为是一样的。
import javax.swing.JApplet;
import javax.swing.JTable;
import javax.swing.table.AbstractTableModel;
public class test extends JApplet
{
class model extends AbstractTableModel
{
@Override
public int getColumnCount()
{
return 3;
}
@Override
public int getRowCount()
{
return 3;
}
@Override
public Object getValueAt(int arg0, int arg1)
{
return "<html><b>" + Math.random() + "</b></html>"; // does not work
//return "" + Math.random(); // work
}
public void setValueAt(Object newValue, int row, int col)
{
fireTableCellUpdated(row, col);
}
}
JTable t = new JTable();
public void init()
{
t.setModel(new model());
add(t);
}
public void start()
{
new Thread(new Runnable()
{
@Override
public void run()
{
int i=0;
try
{
while(++i<100)
{
Thread.sleep(100); // thanks to camickr
t.setValueAt(Void.class, (int)(Math.random()*10) %3, (int)(Math.random()*10) %3);
}
}
catch (InterruptedException e)
{
e.printStackTrace();
}
}
}).start();
}
}
编辑:
HTML applet代码里面index.html
<applet width="500px" height="500px" alt="test test test" code="test.class">
</applet>
汇编代码: javac test.java
生产:文件test$1.class test.class test$model.class
第一次运行确定。新建选项卡,然后关闭小程序选项卡。重新打开小程序选项卡(不要关闭浏览器)并且不会呈现表格内容。
EDIT 2
它是一个JVM BUG!见http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6995386和其他相关。它只影响JRE 1.6.0_22
你说得对,我的错。你确认这种奇怪的行为? – BeginEnd 2011-02-14 21:18:03