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

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

私は上記のコードを例として使用しています。コードネームを使用してモバイルアプリケーションをコーディングしました。変数は初期化されます。TxtFieldで文字列と出力を文字列に変換して出力する - CodeNameOne

モバイルアプリケーションを実行し、同様のコード(上記)を実行したボタンを押すとエラーメッセージが表示されますが、残念ながらトラブルシューティング後にクラッシュの原因となったテキストフィールドに出力していました。

私のモバイルアプリケーションには5つのUIセクションがあります。ユーザー登録のセクションは、データを取得し、それを計算し、別のUIセクション「結果」のテキストフィールドを使用してデータを出力します。

この問題は何故ですか?

エラー:

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

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で開いた。ネットビーンズは時々痛みを伴うことがあります。これは明らかに単なる推測です。 – JSint

答えて

0

可能性は、あなたのdoubleが初期化されていることを確認します。

+0

doubleは初期化され、SystemOutを使用して値をテストします。 IntはDoubleの正しい丸め値でした。テキストフィールドに出力することができません。私は文字列をテストし、それも正しい値でした。 – JSint

+0

だから問題は 'findTxtField()'から来たと思います。あなたはそれを確認しましたか? –

+0

私は同じUI要素 "Reg"上にTxtFieldを作成しましたが、 "Test"というメッセージを出力できましたが、同じアプリケーション内の他のUIページの他のTxtFieldでは使用できません。 – JSint

0

変数名がdoubleでdoubleがjavaキーワードであるため、エラーが発生していると思います。

double dbl = 0.0;

2番目の問題は、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を削除してください。

関連する問題