2016-04-15 33 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