Java堆栈溢出错误

Java堆栈溢出错误,java,model,jtable,stack-overflow,Java,Model,Jtable,Stack Overflow,在第三行,我得到了StackOverflowerr异常。我打算做的是从一个对象中获取一个JTable单元格值,将其转换为浮点,将其限制为小数点后3位,最后转换为字符串,并在单元格中设置小数点后3位的值 我想问题是我正在更改值,并且一次又一次地输入函数。所以堆栈溢出就是由于这个原因。问题是,我如何解决这个问题 在以下位置完成功能: (很抱歉发布了两次…这是一个不同的问题,解决方案让我遇到了一个不同的问题)问题是setValueAt()将在所有注册的侦听器上执行tableChanged() 为了避免

在第三行,我得到了StackOverflowerr异常。我打算做的是从一个对象中获取一个JTable单元格值,将其转换为浮点,将其限制为小数点后3位,最后转换为字符串,并在单元格中设置小数点后3位的值

我想问题是我正在更改值,并且一次又一次地输入函数。所以堆栈溢出就是由于这个原因。问题是,我如何解决这个问题

在以下位置完成功能:
(很抱歉发布了两次…这是一个不同的问题,解决方案让我遇到了一个不同的问题)

问题是
setValueAt()
将在所有注册的侦听器上执行
tableChanged()


为了避免这种情况,只需检查单元格中的值是否已经是您方法中的第一件事所需的格式,如果已经是,则不要执行任何操作。

问题是,
setValueAt()
作为其实现的一部分,将在所有注册的侦听器(包括此侦听器)上调用
tableChanged()


为了避免这种情况,只需在方法中首先检查单元格中的值是否已采用所需的格式,如果已采用,则不要执行任何操作。

如果单元格的值未更改,则不要调用model.setValueAt()。
它应该停止递归。

如果单元格的值没有更改,就不要调用model.setValueAt()。
它应该停止递归。

我认为这项任务通常是通过为表设置自定义编辑器来完成的。以便将所有输入数据格式化为所需的格式。请参阅答案。

我认为这项任务通常是通过为表设置自定义编辑器来完成的。以便将所有输入数据格式化为所需的格式。请参阅答案。

也许您需要类似

...
float value = Float.parseFloat((String)model.getValueAt(e.getLastRow(), 1));             
DecimalFormat dec = new DecimalFormat("#.###");
model.setValueAt(dec.format(value), e.getLastRow(), 1);
...

也许你需要像这样的东西

...
float value = Float.parseFloat((String)model.getValueAt(e.getLastRow(), 1));             
DecimalFormat dec = new DecimalFormat("#.###");
model.setValueAt(dec.format(value), e.getLastRow(), 1);
...

你确定你没有多次给自己打电话导致错误吗?实际的堆栈跟踪是什么?我知道问题是因为setValueAt触发了另一个tableChanged()事件。但我不知道如何避免它!可能重复的您确定没有多次呼叫自己导致错误吗?实际的堆栈跟踪是什么?我知道问题是因为setValueAt触发了另一个tableChanged()事件。但我不知道如何避免它!可能的副本@罗马RDGZ:考虑接受这个答案,如果它已经解决了你的问题。仍然看起来有点黑客::对不起,DomSelvon,它告诉我等待几分钟来接受答案,我太忙之后接受。现在是了,谢谢eneryone@RomanRdgz:如果你解决了这个问题,就考虑接受这个答案。看起来还是有点麻烦:“对不起,DomSelvon,它让我等几分钟来接受这个答案,然后我忙得不可开交。”现在是了,谢谢你