2012-12-20 2 views
1

JTextField을 int로 변환하면 GUI 프로그램이 충돌합니다. 내가 같은 방법을 사용했기 때문에이 코드 세그먼트를 검토하고 무엇이 잘못되었는지 살펴볼 수있었습니다.JTextField에서 변환 할 때 NumberFormatException이 발생했습니다.

내가 무엇을 :

new JTextLabel l; 

가 뭐죠 거기에 도착

String A = l.getText() >int i = Interger.parse(A); 

코드 :

btnAdd.addActionListener(new ActionListener() { 
    public void actionPerformed(ActionEvent e) { 
     int nr = Integer.parseInt(txtApt.getText()); 
     int nrP = Integer.parseInt(txtNrPips.getText()); 
     String owner = txtOwner.toString(); 
     Apartment a = new Apartment(nr, nrP, owner, false); 
     Expense b = new Expense(Float.parseFloat(textWW.getText()), Float.parseFloat(textCW.getText()), 
       Float.parseFloat(textGAS.getText()), Float.parseFloat(txtELEC.getText()), Float.parseFloat(textHEAT.getText())); 
     ArrayList<Expense> l = new ArrayList<>(); 
     l.add(b); 
     cont.addKeyWithList(a,l); 
    } 
}); 

스택 :

Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: For input string: "" 
    at java.lang.NumberFormatException.forInputString(Unknown Source) 
    at java.lang.Integer.parseInt(Unknown Source) 
    at java.lang.Integer.parseInt(Unknown Source) 
    at gui.Gui$4.actionPerformed(Gui.java:195) 
    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 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.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.dispatchEventImpl(Unknown Source) 
    at java.awt.EventQueue.access$200(Unknown Source) 
    at java.awt.EventQueue$3.run(Unknown Source) 
    at java.awt.EventQueue$3.run(Unknown Source) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source) 
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source) 
    at java.awt.EventQueue$4.run(Unknown Source) 
    at java.awt.EventQueue$4.run(Unknown Source) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.ProtectionDomain$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) 
    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) 
+1

수정 사항은 try/catch NumberFormatException 블록을 사용하는 것입니다. 그러나 String은 무엇에 충돌하고 있습니까? 예외 텍스트 (여기에 게시해야 함)가 알려줍니다. –

+0

스택 오류 –

+0

@ BogdanM을 추가했습니다. 문자열은''''입니다. 즉, 비어있어서 숫자로 파싱 할 수 없습니다. – assylias

답변

5

하나 이상의 JTextField가 비어 있고 int를 구문 분석하려고 할 때 오류가 발생하면이 메서드가 호출되는 것이 문제입니다. 해결책은 이것이 발생하면이 메소드가 호출되지 않도록 차단하는 것입니다. 예를 들어, JTextField 문서에 DocumentListener를 사용하여 JTextFields에 텍스트가 있는지 확인하고 필요한 모든 텍스트 필드에 텍스트가 나타날 때까지 JButton을 비활성화 할 수 있습니다.

btnAdd.addActionListener(new ActionListener() { 
    public void actionPerformed(ActionEvent e) { 
     try { 
     int nr = Integer.parseInt(txtApt.getText()); 
     int nrP = Integer.parseInt(txtNrPips.getText()); 
     // ... etc ... 
     } catch (NumberFormatException nfe) { 
     // warn the user that the textfields are not parsing well. 
     } 
    } 
}); 
+0

감사합니다. 그리고 또한리스트에 대한 힌트를 얻으려고 –

+1

@ BogdanM : 천만에! 평소와 같이 stacktrace를 게시 해 주셔서 감사합니다. 문제가 무엇인지 대부분 알려줍니다. –

2

을 텍스트 필드의 일부를 구문 분석을 질식 유효 숫자의 컨텐츠를 가지고 있지 않습니다

또한, 내가 트랩 예외 위의 제안 try/catch 블록을 사용하고 적절하게 그들을 처리 할. 이 문제를 해결하려면 데이터를 사전 필터링해야합니다.

float floatWW = MY_DEFAULT_VALUE; 
boolean errorWW = false; 
try { 
    float floatWW = Float.parseFloat(textWW.getText()); 
} catch (NumberFormatException ex) { 
    errorWW = true; 
} 

(등등 당신의 각에서는 parseFloat 호출)

다음 오류를 표시하거나 나쁜 이우 푸트 주어 졌을 때 그냥 기본값을 사용할지 여부를 결정할 수 있습니다.

1

숫자로 변환 할 수없는 문자열을 변환하면 문제가 발생합니다. 예 : 2 개의 문자열 변수가 있으며, 하나는 "3"이고 다른 변수는 "3"입니다. 나중에 정수로 변환하려고하면 NumberFormatException이 반환됩니다.

텍스트 필드에 값을 입력하지 않으면 비어 있으며 예외가 발생합니다.

따라서 예외를 제거하십시오. 먼저 getText() 값을 null로 채우지 않고 공백으로 두어 정규식을 적용한 후 알파벳과 특수 문자가 아닌 숫자 만 받아들이도록합니다.

관련 문제