2014-09-25 4 views
0

코사인 함수로 재생하는 데 어려움을 겪고 있습니다. 정수 데이터 형식 함수에 관한 한 나머지 코드는 제대로 작동하지만 컴파일러에서 이중 데이터 형식 함수에 오류가있는 이유를 이해할 수 없습니다. 여기 "AWT-EventQueue-0"스레드의 예외 java.lang.NumberFormatException : 입력 문자열 ""

/* 
* To change this license header, choose License Headers in Project Properties. 
* To change this template file, choose Tools | Templates 
* and open the template in the editor. 
*/ 


import java.awt.Container; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.text.NumberFormat; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.JTextField; 

/** 
* 
* @author amjad 
*/ 

public class CalculatorVisual extends JFrame implements ActionListener { 

//Methods will be used from this class 
CalculatorProps cp = new CalculatorProps(); 

JTextField val1, val2; 
JButton btnPlus, btnMinus, btnMultiply, btnDiv, btnSine, btnCosine, btnTan, 
     btnPow, btnSqrt, btnModulo, btnLog; 

public CalculatorVisual(){ 

    super("Calculator - Visual"); 

    Container c = getContentPane(); 
    val1 = new JTextField(20); 
    val2 = new JTextField(20); 

    btnPlus = new JButton("+"); 
    btnMinus = new JButton("-"); 
    btnMultiply = new JButton("X"); 
    btnDiv = new JButton("/"); 
    btnCosine = new JButton("Cos"); 

    btnPlus.addActionListener(this); 
    btnMinus.addActionListener(this); 
    btnMultiply.addActionListener(this); 
    btnDiv.addActionListener(this); 
    btnCosine.addActionListener(this); 

    JPanel p = new JPanel(); 

    p.add(val1); 
    p.add(val2); 
    p.add(btnPlus); 
    p.add(btnMinus); 
    p.add(btnMultiply); 
    p.add(btnDiv); 
    p.add(btnCosine); 

    c.add(p); 


} 

@Override 
public void actionPerformed(ActionEvent e) { 
    int a = Integer.parseInt(val1.getText()); 
    int b = Integer.parseInt(val2.getText()); 

    if(e.getSource()== btnPlus){ 
     val1.setText("" + cp.sum(a, b)); 
     val2.setText(""); 
    } 

    else if(e.getSource()== btnMinus){ 
     val1.setText("" + cp.sub(a, b)); 
     val2.setText(""); 
    } 

    else if(e.getSource() == btnMultiply){ 
     val1.setText("" + cp.multiply(a, b)); 
     val2.setText(""); 
    } 

    else if(e.getSource() == btnDiv){ 
     val1.setText("" + cp.divide(a, b)); 
     val2.setText(""); 
    } 

    else if(e.getSource() == btnCosine){ 
     double txtDouble = (double)a; 
     double d_result = cp.calcCos(txtDouble); 
     val1.setText(Double.toString(d_result)); 
     val2.setText(""); 
    } 
} 

public static void main(String[] args) { 
    CalculatorVisual calc = new CalculatorVisual(); 
    calc.setSize(300,300); 
    calc.setVisible(true); 
    calc.setDefaultCloseOperation(3); 
} 
} 

다음은 스택 추적

Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: For input string: "" 
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) 
at java.lang.Integer.parseInt(Integer.java:592) 
at java.lang.Integer.parseInt(Integer.java:615) 
at CalculatorVisual.actionPerformed(CalculatorVisual.java:68) 
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022) 
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2346) 
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402) 
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259) 
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252) 
at java.awt.Component.processMouseEvent(Component.java:6525) 
at javax.swing.JComponent.processMouseEvent(JComponent.java:3321) 
at java.awt.Component.processEvent(Component.java:6290) 
at java.awt.Container.processEvent(Container.java:2234) 
at java.awt.Component.dispatchEventImpl(Component.java:4881) 
at java.awt.Container.dispatchEventImpl(Container.java:2292) 
at java.awt.Component.dispatchEvent(Component.java:4703) 
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4898) 
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4533) 
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4462) 
at java.awt.Container.dispatchEventImpl(Container.java:2278) 
at java.awt.Window.dispatchEventImpl(Window.java:2739) 
at java.awt.Component.dispatchEvent(Component.java:4703) 
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:746) 
at java.awt.EventQueue.access$400(EventQueue.java:97) 
at java.awt.EventQueue$3.run(EventQueue.java:697) 
at java.awt.EventQueue$3.run(EventQueue.java:691) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75) 
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:86) 
at java.awt.EventQueue$4.run(EventQueue.java:719) 
at java.awt.EventQueue$4.run(EventQueue.java:717) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75) 
at java.awt.EventQueue.dispatchEvent(EventQueue.java:716) 
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201) 
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116) 
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105) 
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) 
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93) 
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82) 
Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: For input string: "" 
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) 
at java.lang.Integer.parseInt(Integer.java:592) 
at java.lang.Integer.parseInt(Integer.java:615) 
at CalculatorVisual.actionPerformed(CalculatorVisual.java:68) 
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022) 
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2346) 
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402) 
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259) 
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252) 
at java.awt.Component.processMouseEvent(Component.java:6525) 
at javax.swing.JComponent.processMouseEvent(JComponent.java:3321) 
at java.awt.Component.processEvent(Component.java:6290) 
at java.awt.Container.processEvent(Container.java:2234) 
at java.awt.Component.dispatchEventImpl(Component.java:4881) 
at java.awt.Container.dispatchEventImpl(Container.java:2292) 
at java.awt.Component.dispatchEvent(Component.java:4703) 
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4898) 
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4533) 
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4462) 
at java.awt.Container.dispatchEventImpl(Container.java:2278) 
at java.awt.Window.dispatchEventImpl(Window.java:2739) 
at java.awt.Component.dispatchEvent(Component.java:4703) 
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:746) 
at java.awt.EventQueue.access$400(EventQueue.java:97) 
at java.awt.EventQueue$3.run(EventQueue.java:697) 
at java.awt.EventQueue$3.run(EventQueue.java:691) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75) 
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:86) 
at java.awt.EventQueue$4.run(EventQueue.java:719) 
at java.awt.EventQueue$4.run(EventQueue.java:717) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75) 
at java.awt.EventQueue.dispatchEvent(EventQueue.java:716) 
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201) 
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116) 
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105) 
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) 
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93) 
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82) 

입니다 내가 CalculatorVisual 클래스에서 사용하고있는 기능 '클래스입니다.

public class CalculatorProps { 

int val1,val2, int_result; 
double d_val1, d_val2, d_result; 

CalculatorProps(){ 

} 

public int sum(int val1,int val2) 
{ 
    return int_result = val1+val2; 
} 

public int sub(int val1,int val2){ 
    return int_result = val1-val2; 
} 

public int multiply(int val1,int val2){ 
    return int_result = val1*val2; 
} 

public int divide(int val1,int val2){ 
    return int_result = val1/val2; 
} 

public int remainder(int val1,int val2){ 
     return int_result = val1 % val2; 
} 

double sqrt(double d_val1){ 
    double d_result=Math.sqrt(d_val1); 
    return d_result; 
} 

double pow(double d_val1,double d_val2){ 
    double d_result=Math.pow(d_val1,d_val2); 
    return d_result; 
} 

int fact(int val1){ 
    if(val1<=1) 
     return 1; 
    else 
     return (val1*fact(val1-1)); 
} 

public double calcSine(double d_val1){ 
    double d_result= Math.sin(d_val1); 
    return d_result; 
} 

public double calcCos(double d_val1){ 
    double d_result = Math.cos(d_val1); 
    return d_result; 
} 

public double calcTan(double d_val1){ 
    double radians = Math.toRadians(d_val1); 
    return d_result = Math.tan(radians); 
} 

public double calcLog(double d_val1){ 
    double d_result = Math.log(d_val1); 
    return d_result; 
} 
} 

답변

1

글쎄, 무슨 일이되어야하는 것은 val1 또는 val2 당신이 버튼을 클릭 텍스트가 없다는 것입니다. 그것이 바로 오류 메시지가 불평하는 것입니다. 해당 케이스를 확인하고 actionPerformed 메소드 상단에서 처리해야합니다.

+0

actionPerformed 메소드의 시작 부분에서 val1 및 val2에 주석을 달면 원하는 결과를 얻습니다. 답장을 보내 주셔서 감사합니다. 그래서 actionTemplate에서/else 블록이 시작 또는 버튼에서 getText에 더 좋은 방법이 될 것이라고 제안 해주십시오. – Amjad

관련 문제