當我嘗試用同一行的其他兩個單元格的乘法填充單元格時,出現StackOverflowError錯誤。 下面是代碼:如何解決由JTable事件生成的StackOverflowError?
tableModel.addTableModelListener(new TableModelListener(){
public void tableChanged(TableModelEvent e)
{
DefaultTableModel model = (DefaultTableModel)e.getSource();
//Object data = model.getValueAt(e.getFirstRow(), e.getColumn());
if (e.getColumn() == 0)
{
Object data = model.getValueAt(e.getFirstRow(), e.getColumn());
String stockSymbol = (String)data;
XMLService2 myService = new XMLService2(stockSymbol);
String stockName = XMLService2.getStockName();
model.setValueAt(stockName, e.getFirstRow(), e.getColumn() + 1);
}
if (model.getValueAt(e.getFirstRow(), 2) != null && model.getValueAt(e.getFirstRow(), 3) != null)
{
Double myDouble =(Integer)model.getValueAt(e.getFirstRow(), 2)*(Double)model.getValueAt(e.getFirstRow(), 3);
model.setValueAt(myDouble, e.getFirstRow(), 4);
}
}
});
這段代碼中調用setValueAt功能產生的StackOverflowError的最後一行。 謝謝。
PS: 該表由5列組成。 第三列的類型是整數。 第4列的類型是Double。 獲得第3個和第4個單元格乘法結果的第5列的類型是Double。
檢查調用堆棧窗口以查看它來自何處。然後如果問題仍然存在,再次問你的stackoverflow問題的stackoverflow! ;)乾杯 – Rikki
不知道代碼做了些什麼,但'model.setValueAt'可能會導致'tableChanged'再次被調用,它再次設置該值,這導致無限循環。 – zapl
不會更改回調方法中的調用方(即模型)的狀態!相反,實現一個自定義模型,根據需要自行更新,並且只有當所有內部更新完成時纔會觸發。 – kleopatra