2016-04-15 27 views
0
Double double; 
    int integer = (int) Math.round(double); 
    String string = Integer.toString(integer); 

    System.out.println(string); 
    findTxtField().setText(string); 

我使用上述代码作为示例 - 我已使用CodeNameOne编码我的移动应用程序。变量被初始化。隐藏双整数字符串和输出在TxtField - CodeNameOne

运行移动应用程序并点击执行类似代码的按钮(上图)时,我收到一条错误消息,不幸的是,在排除故障后,我发现它是输出到导致崩溃的文本字段。

我的移动应用程序有5个UI部分。用户“注册”部分将获取数据,计算出数据,然后使用另一个UI部分“结果”中的文本字段输出数据。

任何想法,为什么我有这个问题?

错误:

java.lang.NullPointerException 
at userclasses.StateMachine.onMain_BtnInfoAction(StateMachine.java:171) 
at generated.StateMachineBase.handleComponentAction(StateMachineBase.java:2251) 
at com.codename1.ui.util.UIBuilder$FormListener.actionPerformed(UIBuilder.java:2831) 
at com.codename1.ui.util.EventDispatcher.fireActionEvent(EventDispatcher.java:345) 
at com.codename1.ui.Button.fireActionEvent(Button.java:397) 
at com.codename1.ui.Button.released(Button.java:428) 
at com.codename1.ui.Button.pointerReleased(Button.java:516) 
at com.codename1.ui.Form.pointerReleased(Form.java:2560) 
at com.codename1.ui.Form.pointerReleased(Form.java:2496) 
at com.codename1.ui.Component.pointerReleased(Component.java:3108) 
at com.codename1.ui.Display.handleEvent(Display.java:2017) 
at com.codename1.ui.Display.edtLoopImpl(Display.java:1065) 
at com.codename1.ui.Display.mainEDTLoop(Display.java:994) 
at com.codename1.ui.RunnableWrapper.run(RunnableWrapper.java:120) 
at com.codename1.impl.CodenameOneThread.run(CodenameOneThread.java:176) 
+0

您没有'double'变量的值,它的类型为'Double',它是一个包装类,而不是原始类。所以它被初始化为null。 – SacJn

+0

初始化double并使用SystemOut测试值。 Int是Double的正确四舍五入值。我只是无法在文本框中输出。我测试了字符串,它也是正确的值。 – JSint

+0

已解决问题。我重建了应用程序,现在它按预期运行。似乎必须存在兼容性问题。我使用8.1在笔记本电脑上构建它,并在8.0中打开它。 Netbeans有时可能会很痛苦。这显然只是一个猜测。 – JSint

回答

0

可能

Double double; 
int integer = (int) Math.round(double); <-- 

确保您double被初始化。

+0

double被初始化并使用SystemOut来测试值。 Int是Double的正确四舍五入值。我只是无法在文本框中输出。我测试了字符串,它也是正确的值。 – JSint

+0

所以我认为问题来自'findTxtField()'。你检查了吗? –

+0

我在同一个UI元素“Reg”上创建了一个TxtField,并且我能够输出一条消息“Test”,但是我无法在同一个应用程序中的其他UI页面上使用其他TxtField。 – JSint

0

我想你的错误发生是因为你的变量名是双重的,因为double也是一个java关键字。声明变量是这样的:

double dbl = 0.0;

第二个问题是,你不必将你的double转换为整数然后转换为字符串。这是无稽之谈。如果你想设置文本只是简单地使用:

findTxtField().setText(dbl + "");

这自动投了一倍。如果你想要一个整数值使用:

findTxtField().setText((int) Math.round(dbl) + "");

如果所有这一切都不帮助你应该检查你的findTxtField()方法。

+0

没有代码是一个例子。问题是将文本字段设置为某些内容。我试过findTxtField()。setText(“”);作为一个测试,它抛出和错误无论如何没有字符串。这是很好的代码,谢谢。 – JSint

+0

您的findTxtField()方法返回正确的TextField吗?我认为这是问题。你可能会发布方法代码吗? – Wernerson

+0

我在同一个UI元素“Reg”上创建了一个TxtField,并且我能够输出一条消息“Test”,但是我无法在同一应用程序中的其他UI页面上使用其他TxtField。我从来没有遇到过这个。我有大量的代码。你熟悉CodeNameOne吗? – JSint

1

您必须确定函数调用findTxtField()是否返回null。我认为它确实如此。如果是这样的话,试着找出原因。这可能是因为txtField与按钮的格式不同。如果是这样,你必须使用过载功能findTxtField(theFormInQuestion)。或者,也许你实际上从代码中的某处删除了txtField