2011-05-03 5 views
1

나는 확장 Euclid 알고리즘의 수행 방법을 보여줄 애플릿을 시작하는 프로그램을 만들고 있습니다. 두 개의 JTextFields 값을 입력하고 읽고 int/등으로 변환 할 필요가 있습니다. 실제로 입력 값을 읽기 시작하는 데 문제가 있습니다.버튼을 클릭 한 후 두 개의 JTextfield 입력을 읽어야합니다.

업데이트 된 질문 :
내가 처음 답을 읽은 후 내 코드를 변경했습니다. 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를하지만, 단지 결과를 표시하는 데 필요한) 인쇄

이제 내 버튼을 클릭 한 후, 내가 갖는 이러한 오류 밖으로 콘솔 :

예외 EuclidApplet.actionPerformed (EuclidApplet.java:87)에서 스레드 "AWT-EventQueue의-1"java.lang.NullPointerException이 에javax.swing.DefaultButtonModel.fireActionPerformed에서 javax.swing.AbstractButton $ Handler.actionPerformed (알 수없는 소스) 에서 javax.swing.AbstractButton.fireActionPerformed (알 수없는 소스) (알 수없는 소스) 에서javax.swing.DefaultButtonModel.setPressed에서 (알 수없는 소스) 에서 javax.swing.plaf.basic.BasicButtonListener.mouseReleased (알 수없는 소스) 에서 java.awt.Component.processMouseEvent (알 수없는 소스) 에서 javax.swing.JComponent.processMouseEvent (알 수없는 소스) at java .awt.Component.processEvent (알 수없는 소스) at java.awt.Container.processEvent (알 수없는 소스) at java.awt.Component.dispatchEventImpl (알 수없는 소스) at java.awt.Container.dispatchEven tImpl (알 소스)에 java.awt.LightweightDispatcher.processMouseEvent java.awt.LightweightDispatcher.retargetMouseEvent (알 소스)에 java.awt.Component.dispatchEvent (알 소스) (알 소스)에있는 java.awt 에서 . LightweightDispatcher.dispatchEvent (알 수없는 소스) java.awt.Component.dispatchEvent에서 java.awt.Window.dispatchEventImpl (알 수없는 소스) 에서 java.awt.Container.dispatchEventImpl (알 수없는 소스) (알 수없는 소스) 자바에서 에서 . awt.EventQueue.dispatchEventImpl (알 수없는 소스) at java.awt.EventQueue.access $ 000 (알 수없는 소스) at java.awt.EventQueue $ 1.run (알 수없는 소스) at java.awt.EventQueue $ 1.run (알 수없는 소스)java.awt.EventQueue $을 2 java.security.AccessController.doPrivileged (기본 방법) java.security.AccessControlContext $ 1.doIntersectionPrivilege (알 수없는 소스) 에서 java.security.AccessControlContext $ 1.doIntersectionPrivilege (알 수없는 소스) 에서 에서. java.awt.EventQueue $의 2.run (알 수없는 소스) java.security.AccessController.doPrivileged (기본 방법)에서 java.security.AccessControlContext $ 1.doIntersectionPrivilege (알 수없는 소스) 자바에서 에서 에서 실행 (알 수없는 소스) . (알 수없는 소스)에서 awt.EventQueue.dispatchEvent 210에서의 java.awt.EventDispatchThread.java.awt.EventDispatchThread.run에서 pumpEventsForHierarchy (알 소스)에 java.awt.EventDispatchThread.pumpEvents (알 소스)에 java.awt.EventDispatchThread.pumpEvents (알 소스) (알 소스)

내가

nText = nField.getText(); 

을 설정 어디 라인에서 NullPointerException이납니다하지만, 난 여전히 내 JTextField를 삽입 된 것 텍스트를 얻을 수 아니에요 이유를 모르겠어요. 내가 찾은 모든 사례는 이것이 효과가 있다는 것을 보여 주지만 그것을 얻을 수는 없습니다. 감사.

+0

DocumentListener의 컨볼 루션을 거치지 않고 actionPerformed 메서드의 텍스트를 읽는 것만 큼 간단하지 않은 이유는 무엇입니까? –

답변

1

내가) (나는 NTEXT = nField.getText을 설정 라인에 NullPointerException이납니다을;

아마도 nField를 클래스 변수와 로컬 변수로 정의했기 때문일 수 있습니다. 문제는 널 변수 인 null을 참조하려고한다는 것입니다.

해결책은 클래스 변수를 없애는 것입니다.

+0

예! 지금 일하고있어 정말 고마워! –

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

+0

고맙습니다! 나는 equals 대신에 ==를 사용했다고 믿을 수 없다. 나는 이것을 시도하고 그것이 어떻게되는지 보게 될 것이다. 다시 한 번 감사드립니다! –

관련 문제