【发布时间】:2013-12-30 17:13:24
【问题描述】:
我的程序使用意大利语言环境,所以Float.parseFloat("8,00") 必须运行良好。
但是我在下面一行遇到了一个非常糟糕的 NFE:
this.cuSurfaceJTextField1.setValue(
String.format("%05.2f",info.getCuSurface()));
我注意到上面的代码在我对侦听器所做的一些更改之前运行良好,这些更改看起来与这行代码无关。(现在我有一个 propertyChangeListener 可以在值时更新模型变了。
this.cuSurfaceJTextField1.addPropertyChangeListener("value",
new PropertyChangeListener() {
@Override
public void propertyChange(PropertyChangeEvent evt) {
info.setCuSurface(Float.parseFloat(
(String)cuSurfaceJTextField1.getValue()));
updateCuSurface();
}
});
异常的有用部分:
Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: For input string: "08,00"
at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1241)
at java.lang.Float.parseFloat(Float.java:452)
at View.bars.QuadrateJPanel$11.propertyChange(QuadrateJPanel.java:348)
at java.beans.PropertyChangeSupport.fire(PropertyChangeSupport.java:335)
at java.beans.PropertyChangeSupport.firePropertyChange(PropertyChangeSupport.java:328)
at java.beans.PropertyChangeSupport.firePropertyChange(PropertyChangeSupport.java:263)
at java.awt.Component.firePropertyChange(Component.java:8382)
at javax.swing.JFormattedTextField.setValue(JFormattedTextField.java:799)
at javax.swing.JFormattedTextField.setValue(JFormattedTextField.java:502)
【问题讨论】:
-
Parsefloat 不是特定于语言环境的。相关问题:stackoverflow.com/questions/5233012/…
-
@Simplefish 没错!也许我的那行代码以前从未执行过,我认为它运行良好!我测试了一个简单的样本。没有什么东西可以给我一个本地化的 parseFloat 吗? java返回给我的值有,修改它不是一个好习惯。
-
@HotLicks 我必须转换并格式化该值,因为我的 JFormattedTextField 被屏蔽为“##,##”。所以我需要字符串
-
@Johnny NumberFormat 和 DecimalFormat 可能是你想的。
标签: java string-formatting jformattedtextfield propertychangelistener