Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JTable不渲染_Java_Swing_Jtable_Japplet - Fatal编程技术网

Java JTable不渲染

Java JTable不渲染,java,swing,jtable,japplet,Java,Swing,Jtable,Japplet,加载带有小程序的页面时,JTable对象的内容会得到完美呈现。当我关闭一个选项卡并重新打开它时,会呈现开始时设置的内容,但当我通过setValeAt()表更改的内容变为空时。当我从数据模型中删除所有html标记时,一切正常。我对表的默认呈现器只执行数据模型不做任何操作。所有的值都是通过setValeAt()设置的,它可以工作(我检查了它)。 有人知道会出什么问题吗 下面是重现错误的示例代码。运行小程序(值将更改),然后关闭选项卡(而不是浏览器)并重新打开它。我在Firefox 3.6.13和Ja

加载带有小程序的页面时,JTable对象的内容会得到完美呈现。当我关闭一个选项卡并重新打开它时,会呈现开始时设置的内容,但当我通过
setValeAt()
表更改的内容变为空时。当我从数据模型中删除所有html标记时,一切正常。我对表的默认呈现器只执行数据模型不做任何操作。所有的值都是通过
setValeAt()
设置的,它可以工作(我检查了它)。 有人知道会出什么问题吗

下面是重现错误的示例代码。运行小程序(值将更改),然后关闭选项卡(而不是浏览器)并重新打开它。我在Firefox 3.6.13和Java 1.6.0_22-b04中,在Linux和Windows XP上对其进行了测试。它的作用是一样的

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();
    }
}
编译代码:
javac test.java

生成:文件
test$1.class test.class test$model.class

第一次跑步可以。创建新选项卡,然后关闭小程序选项卡。重新打开小程序选项卡(不要关闭浏览器),表内容不会呈现

编辑2

这是一个JVM错误!请参阅和其他相关内容。它只影响JRE 1.6.0_22

我无法在XP上使用JDK6_7重现该问题

价值观将发生变化

这些值不会一直更改,因为每次更新模型后都不会休眠。我稍微修改了代码:

// Thread.sleep(100);

while( ++i<100 )
{
    t.setValueAt(Void.class, (int)(Math.random()*10) %3, (int)(Math.random()*10) %3 );
    Thread.sleep(500);
}
//线程睡眠(100);

虽然你是对的,但我错了。你确认这种奇怪的行为吗?
// Thread.sleep(100);

while( ++i<100 )
{
    t.setValueAt(Void.class, (int)(Math.random()*10) %3, (int)(Math.random()*10) %3 );
    Thread.sleep(500);
}