Необходимо прочитать ввод двух JTextfields после нажатия кнопки - PullRequest
1 голос
/ 03 мая 2011

Я работаю над программой, которая запускает апплет, который продемонстрирует, как работает алгоритм Extended-Euclid.У меня есть два поля 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.AbstractBknownerformed $в javax.swing.DefaultButtonModel.fireActionPerformed (Неизвестный источник) в javax.swing.DefaultButtonModel.setPressed (Неизвестный источник) в javax.swing.plaf.basic.BasicButtonListener.mouseReleased (Неизвестный источник) в java.awtИсточник) на javax.swing.JComponent.processMouseEvent (Неизвестный источник) на java.awt.Component.processEvent (неизвестный источник) в java.awt.Container.processEvent (неизвестный источник) в java.awt.Component.dispatchEventImpl (неизвестный источник) в java.awt.Container.dispatchEventImpl (неизвестный источник) в java.awt.Component.dispatchEvent (Неизвестный источник) в java.awt.LightweightDispatcher.retargetMouseEvent (Неизвестный источник) в java.awt.LightweightDispatcher.processMouseEvent (Неизвестный источник) в java.awt.LightweightDispatcher.dispatchEvent (Неизвестный источник) в jvent.awpisНеизвестный источник) в java.awt.Window.dispatchEventImpl (Неизвестный источник) в java.awt.Component.dispatchEvent (Неизвестный источник) в java.awt.EventQueue.dispatchEventImpl (Неизвестный источник) в java.awt.EventQueue.access $ 000 (Источник) на java.awt.EventQueue $ 1.run (неизвестный источник) на java.awt.EventQueue $ 1.run (неизвестный источник) на java.security.AccessController.doPrivileged (собственный метод) на java.security.AccessControlContext $ 1.doIntersectionPrivilegeНеизвестный источник) в java.security.AccessControlContext $ 1.doIntersectionPrivilege (неизвестный источник) в java.awt.EventQueue $ 2.run (неизвестный источник) в java.awt.EventQueue $ 2.run (неизвестный источник) в java.security.AccessController.doPrivileged (собственный метод) в java.security.AccessControlContext $ 1.doIntersectionPrivilege (Unknown Source) в java.awt.EventQueue.dispatchEvent (Unknown Source) в java.awt.EventDispatchThread.pumpOneEventForFilters (Unknown Source) в java.awt.EventDispatchThread.pumpEventsForFilter (Unknown Source) в java.awt.EventDispatchThread.pumpEventsForHierarchy(Неизвестный источник) в java.awt.EventDispatchThread.pumpEvents (Неизвестный источник) в java.awt.EventDispatchThread.pumpEvents (Неизвестный источник) в java.awt.EventDispatchThread.run (Неизвестный источник)

IЯ получаю исключение NullPointerException в строке, где я установил

nText = nField.getText();

, но я все еще не уверен, почему не могу получить текст, который был вставлен в мой JTextField.Каждый пример, который я нашел, показывает, что это должно работать, но я не могу этого понять.Спасибо.

Ответы [ 2 ]

1 голос
/ 03 мая 2011

Я получаю исключение NullPointerException в строке, где я устанавливаю nText = nField.getText ();

Это, вероятно, потому что вы определили nField как переменную класса и локальную переменную.Проблема в том, что вы пытаетесь сослаться на переменную класса, которая имеет значение null.

Решение состоит в том, чтобы избавиться от переменной класса.

1 голос
/ 03 мая 2011

Решение: не используйте 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));
}

Не делайте этого, так как это может работать иногда, а иногда - не работать. На самом деле вас не волнует, являются ли две строки одним и тем же объектом (что и проверяет оператор ==), но вы хотите знать, содержат ли они одинаковые строковые данные. Для этого вы должны использовать метод equalsIquoreIgnoreCase:

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