При загрузке страницы с апплетом Содержимое JTable-объекта визуализируется отлично. Когда я закрываю вкладку и снова открываю ее содержимое, установленное при запуске, отображается, но когда содержимое, которое я изменил с помощью таблицы setValeAt()
, становится пустым. Когда я удаляю все теги html из модели данных, все работает. Я ничего не делаю с таблицей по умолчанию рендеринга только для модели имплантата. Все значения установлены через setValeAt()
, и он работает (я проверил его). Может ли кто-нибудь понять, что может быть неправильным?JTable не отображает
Вот пример кода, который воспроизводит ошибку. Запустите апплет (значения будут меняться), а затем закройте вкладку (НЕ браузер) и снова откройте ее. Я тестировал его в 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();
}
}
EDIT:
HTML код апплета внутри 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
Запуск в первый раз OK. Создайте новую вкладку и закройте вкладку апплетов. Повторно открыть вкладку апплета (не закрывать браузер), а содержимое таблицы не отображается.
EDIT 2
ЭТО JVM BUG! см. http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6995386 и другие. Это влияет только на JRE 1.6.0_22
Вы правы, моя ошибка. Вы подтверждаете это странное поведение? – BeginEnd