Java 堆栈溢出错误

发布于 2024-11-16 16:32:40 字数 564 浏览 2 评论 0原文

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

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

我想问题是我正在更改值,并一次又一次地输入该函数。所以 StackOverflow 就是因为这个。问题是,我该如何解决这个问题?

完整功能位于:Java:转换数据类型 (抱歉发布两次......这是一个不同的问题,解决方案让我遇到了另一个问题)

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

at the third line i'm getting the stackOverflowError exception. What I'm intending to do is getting a JTable cell value from an Object, converting it to a float, limiting it to 3 decimal places, and finally convert to String and set the value with 3 decimal places at the cell.

I guess the problem is I'm changing the value, and entering the function again and again. So the StackOverflow is due to that. Question is, how can i fix this?

Complete function at: Java: Converting data types
(Sorry for posting twice... It was a different question, and the solution drove me to a different problem)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

稳稳的幸福 2024-11-23 16:32:40

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

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

The problem is that setValueAt() will, as part of its implementation call tableChanged() on all registered listeners, including this one.

In order to avoid this, simply check whether the value in the cell is already in the desired format as the first thing in your method, and don't do anything if it is.

寒冷纷飞旳雪 2024-11-23 16:32:40

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

Just don't call model.setValueAt() if value of the cell is not changed.
It should stop the recursion.

病女 2024-11-23 16:32:40

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

I think this task is usually accomplished by setting a custom editor to the table. So that it formats all input data to a desired form. See this answer.

清风无影 2024-11-23 16:32:40

也许你需要类似的东西

String text = (String) model.getValueAt(e.getLastRow(), 1);
String text2 = new DecimalFormat("#.###").format(Float.parseFloat(text));
if (!text.equals(text2))
    model.setValueAt(dec.format(value), e.getLastRow(), 1);

Perhaps you need something like

String text = (String) model.getValueAt(e.getLastRow(), 1);
String text2 = new DecimalFormat("#.###").format(Float.parseFloat(text));
if (!text.equals(text2))
    model.setValueAt(dec.format(value), e.getLastRow(), 1);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文