2011-06-29 10 views
-4

GUI、ボタン、相対的なActionListeners、および例外を持つアプリを開発しました。 今日私はこの問題を抱えていました。 setAvailable, setNotAvailable,setPerishable,setCurrentLoad基準auto外部クラスのメソッドであるいつもこの例外が発生しますか?

public void actionPerformed(ActionEvent ae){ 

if(ae.getSource()==b1){ 
try{//FIRST `JOptionPane.showInputDialog` 
    int load = Integer.parseInt(JOptionPane.showInputDialog(null,"Insert current load value: ")); 
    auto.setCurrentLoad(load); 
    //other `JOptionPane.showInputDialog` 
int choiceDep = Integer.parseInt(JOptionPane.showInputDialog(null, "Does the truck transport perishable goods? 1: YES 2: NO")); 
if(choiceDep==1) { 
    //here we have to insert expiration date 
    int day = Integer.parseInt(JOptionPane.showInputDialog(null,"Insert value")); 
    int month = Integer.parseInt(JOptionPane.showInputDialog(null,"Insert value")); 
    int year = Integer.parseInt(JOptionPane.showInputDialog(null,"Insert value")); 
    auto.setPerishable(day,month,year); 
} 
else if(choiceDep==2) 
       auto.setNotPerishable(); 

String choiceAv = JOptionPane.showInputDialog(null, "Available Truck? Yes or no?"); 
if(choiceAv.equals("Yes")) auto.setAvailable(); 
else auto.setNotAvailable(); 

} 
     //the exception  
    catch (Exception e) { System.out.println("Exception!");}    
    } 

:私のGUIのボタンにactionEventに対して、私はいくつかのJOptionPane.showInputDialogと、このコードを挿入します。

このコードを実行すると、GUIが表示され、次にb1というボタンをクリックします。最初のJOptionPane.showInputDialogが表示され、int loadに格納された値が挿入されます。

値を入力しましたが、その他のJOptionPane.showInputDialogは表示されませんでしたが(他の入力ダイアログがあります)、コマンドラインに例外があります。 JOptionPane.showInputDialogに挿入された値が、auto.setCurrentLoad(load);という行に決して渡されないことに気付きました。

どうしてですか?前にこのエラーは見たことがありません。なぜ私はいつも最初のJOptionPane.showInputDialogの直後に例外を取得するのですか?同じステートメント/メソッドでJOptionPane.showInputDialogの多くをJVMが受け入れないのでしょうか?あるいは(私の思うように)私のプログラミングエラーですか?

ありがとうございました。乾杯。

編集:私は、コマンドラインに入った例外を挿入するのを忘れ:

java.lang.NullPointerException 
     at AutoCom.actionPerformed(AutoCom.java:50) 
     at javax.swing.AbstractButton.fireActionPerformed(Unknown Source) 
     at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source) 
     at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source) 
     at javax.swing.DefaultButtonModel.setPressed(Unknown Source) 
     at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown So 
ce) 
     at java.awt.Component.processMouseEvent(Unknown Source) 
     at javax.swing.JComponent.processMouseEvent(Unknown Source) 
     at java.awt.Component.processEvent(Unknown Source) 
     at java.awt.Container.processEvent(Unknown Source) 
     at java.awt.Component.dispatchEventImpl(Unknown Source) 
     at java.awt.Container.dispatchEventImpl(Unknown Source) 
     at java.awt.Component.dispatchEvent(Unknown Source) 
     at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source) 
     at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source) 
     at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source) 
     at java.awt.Container.dispatchEventImpl(Unknown Source) 
     at java.awt.Window.dispatchEventImpl(Unknown Source) 
     at java.awt.Component.dispatchEvent(Unknown Source) 
     at java.awt.EventQueue.dispatchEvent(Unknown Source) 
     at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source) 
     at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) 
     at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source) 
     at java.awt.EventDispatchThread.pumpEvents(Unknown Source) 
     at java.awt.EventDispatchThread.pumpEvents(Unknown Source) 
     at java.awt.EventDispatchThread.run(Unknown Source) 
+0

例外はありますか? – bmargulies

+3

取得している例外は何ですか? catchブロックを 'System.out.println ...'から 'e.printStackTrace();'に変更する必要があります。これにより完全な例外が出力されます。ポストをスタックトレースで更新してください。 –

+0

@bmarguliesこれはコマンドラインに表示されます:System.out.println( "Exception!");その後、他のコードは実行されません。 –

答えて

1

ほとんどの場合、ボタンを押す前にautoオブジェクトは初期化されていません。私はautoAutoComクラスのメンバー変数であると仮定しています。その場合、の定義を次のように変更する必要があります。

protected <TypeOfAutoHere> auto = new <TypeOfAutoHere>(); 
+0

修正済みです。私は "プライベート"から "保護された"に変更することなく、オブジェクトを初期化するのを忘れました –

+0

あなたのおかげで、たくさんのコード行でこの重要なことを忘れました。 –

1

をあなたの説明に基づいて、自動変数がヌルであるように見えます。

+0

しかし、私はAutoComクラスの最初のクラスを "private auto auto"と宣言しました。ここで "Auto"は外部クラスです。 –

+0

それはあなただけだ。直した。ありがとうございました。 –

関連する問題