2011-05-03 82 views
1

我正在開發一個程序,該程序將啓動一個將演示Extended-Euclid算法如何執行的小程序。我有兩個JTextField,這些值將被輸入並且需要被讀取/轉換爲整數等。我實際上在閱讀輸入值時遇到了麻煩。單擊按鈕後需要讀取兩個JTextfields的輸入

更新後的問題:
我讀第一個答案後修改了自己的代碼。而不是使用DocumentListener我按照建議在我的actionPerformed方法中做了所有事情,但是當我嘗試測試時,我仍然收到錯誤。

這是我目前的actionPerformed:

public void actionPerformed(ActionEvent event) { 
    System.out.println(event.getActionCommand()); 
    String quotient = ""; 
    nText = nField.getText(); 
    mText = mField.getText(); 

    if("Find GCD".equals(event.getActionCommand())){ 
     int nInt = Integer.parseInt(nText); 
     int mInt = Integer.parseInt(mText); 
     int q = mInt/nInt; 
     quotient = (Integer.toString(q)); 
    } 
    else quotient = "n/a"; 
    //NOT the gcd, just to see if this will display 
    gcd.setText(quotient); 
    gcd.setEditable(false); 
} 

(注:GCD是另一個JTextField的,只是需要顯示的結果)

現在點擊我的按鈕後,我得到這些錯誤打印從控制檯:

在異常線程 「AWT-EventQueue的-1」 顯示java.lang.NullPointerException 在EuclidApplet.actionPerformed(EuclidApplet.java:87) 在javax.swing.AbstractButton.fireActionPerformed(來源不明) 在javax.swing.AbstractButton中的$ Handler.actionPerformed(來源不明) 在javax.swing.DefaultButtonModel.fireActionPerformed(來源不明) 在javax.swing.DefaultButtonModel.setPressed (Unknown Source) at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source) 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.dispatchEven tImpl(未知源) 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.dispatchEventImpl(Unknown Source) at java.awt.EventQueue.access $ 000(Unknown Source) at java.awt.EventQueue $ 1.run(Unknown Source) at java.awt.EventQueue $ 1.run(Unknown Source ) 在java.security.AccessController.doPrivileged(本機方法) 在java.security.AccessControlContext $ 1.doIntersectionPrivilege(來源不明) 在java.security.AccessControlContext $ 1.doIntersectionPrivilege(來源不明) 在java.awt.EventQueue中的$ 2中。 (Unknown Source) at java.awt.EventQueue $ 2.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.security.AccessControlContext $ 1.doIntersectionPrivilege(Unknown Source) at java。 awt.EventQueue.dispatchEvent(Unknown Source) at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source) at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) 在java.awt.EventDispatchThread。pumpEventsForHierarchy(未知來源) 在java.awt.EventDispatchThread.pumpEvents(未知來源) 在java.awt.EventDispatchThread.pumpEvents(未知來源) 在java.awt.EventDispatchThread.run(未知來源)

我在該行得到一個NullPointerException異常時,我真想

nText = nField.getText(); 

但我仍然不知道爲什麼我不能讓一個已經插入我的JTextField中的文本。我找到的每個例子都表明,這應該起作用,但我無法得到它。謝謝。

+0

你爲什麼不簡單地閱讀actionPerformed方法中的文本,而不是通過DocumentListener的卷積和所有與它相關的卷積? – 2011-05-03 02:01:17

回答

1

我在這裏我設置n文字= nField.getText線得到一個NullPointerException();

這可能是因爲您將nField定義爲類變量和局部變量。問題是你試圖引用null變量的類變量。

解決方案是擺脫類變量。

+0

是的!現在它的工作非常感謝你! – 2011-05-03 04:14:59

1

解決方案:不要使用DocumentListener,因爲這不僅是矯枉過正,它是錯誤的。如果你想要按鈕按下的值,那麼得到按鈕操作中的值,而不是來自DocumentListener。如果從按鈕的動作監聽器中獲取值不起作用,那麼我們來弄清楚你做錯了什麼,並幫助你解決這個錯誤。

事實上,我看到你試圖這樣做一次,但評論它:

System.out.println(event.getActionCommand()); 
System.out.println(event.getID()); 
String quotient = ""; 
//nText = nField.getText(); // **** here **** 
//mText = mField.getText(); // **** and here **** 

所以取消這些線路和擺脫你的DocumentListener的。

我看到下面的問題是,您使用的是==操作符試圖檢查,如果字符串是等效的:

if("Find GCD" == event.getActionCommand()){ 
    int nInt = Integer.parseInt(nText); 
    int mInt = Integer.parseInt(mText); 
    int q = mInt/nInt; 
    quotient = (Integer.toString(q)); 
} 

不要這樣做,因爲這有時會工作,並在其他時間失敗。你並不在意這兩個字符串是否相同對象(這是==運算符測試的內容),而是你想知道它們是否包含相同的字符串數據。爲此,您應該使用等號或equalsIgnoreCase方法:

if ("Find GCD".equals(event.getActionCommand())) { 
    int nInt = Integer.parseInt(nText); 
    int mInt = Integer.parseInt(mText); 
    int q = mInt/nInt; 
    quotient = (Integer.toString(q)); 
} 
+0

+1使用按鈕ActionListener – wulfgarpro 2011-05-03 02:17:58

+0

真棒謝謝你!我不能相信我用==代替.equals,我知道比這更好。我會試試看看它是如何發展的。再次感謝! – 2011-05-03 03:18:08