2013-12-08 40 views
0

我不知道代码有什么问题。你们能帮我吗?解析JTextField为整数

int a = Integer.parseInt(aTextField.getText()); 
int b = Integer.parseInt(bTextField.getText()); 
int c = Integer.parseInt(cTextField.getText()); 
int discriminant = (int)Math.pow((double)b, 2) - 4*a*c; 
int x1 = (int)(-b + (double)Math.sqrt(discriminant)/2*a); 
int x2 = (int)(-b - (double)Math.sqrt(discriminant)/2*a); 

public DiscriminantSoft(){ 
    super("Quadratic Equation"); 
    setLayout(new FlowLayout()); 

    headerLabel = new JLabel("ax^2 + bx + c = 0"); 
    headerLabel.setToolTipText("You have to write a, b and c in order to calculate discriminant."); 
    add(headerLabel); 

    aTextField = new JTextField(3); 
    add(aTextField); 
    bTextField = new JTextField(3); 
    add(bTextField); 
    cTextField = new JTextField(3); 
    add(cTextField); 

    thehandler handler = new thehandler(); 
    aTextField.addActionListener(handler); 
    bTextField.addActionListener(handler); 
    cTextField.addActionListener(handler); 

} 

private class thehandler implements ActionListener{ 

    public void actionPerformed(ActionEvent event){ 
     String string = ""; 

     if(discriminant == 0){ 
       string=String.format("Discriminant: " +discriminant +" x: " +x1, event.getActionCommand()); 
     } 
     else if(discriminant > 0){ 
      string=String.format("Discriminant: " +discriminant +" x: " +x1 +" x2: " +x2, event.getActionCommand()); 
     } 
     else if(discriminant < 0){ 
      string=String.format("Discriminant is under zero! No x found", event.getActionCommand()); 
     } 

     JOptionPane.showMessageDialog(null, string); 
    } 

} 

在线程异常 “主” 显示java.lang.NullPointerException 在DiscriminantSoft。(DiscriminantSoft.java:17) 在tuna.main(tuna.java:5)

INT a = Integer.parseInt(aTextField.getText());是17排

+1

这听起来很蠢,但你初始化aTextfield? – PakkuDon

+0

你能显示完整的代码吗? – 2013-12-08 12:02:47

+0

私人JTextField aTextField;我试过这个: String aValue = aTextField.getText(); int a = Integer.parseInt(aValue); – Messing

回答

1

您正尝试在类上下文中获取文本字段的文本:未对文本字段进行初始化时。

int a = Integer.parseInt(aTextField.getText()); 
          //^text fields haven't yet initialized 
int b = Integer.parseInt(bTextField.getText()); 
int c = Integer.parseInt(cTextField.getText()); 
int discriminant = (int)Math.pow((double)b, 2) - 4*a*c; 
int x1 = (int)(-b + (double)Math.sqrt(discriminant)/2*a); 
int x2 = (int)(-b - (double)Math.sqrt(discriminant)/2*a); 

public DiscriminantSoft(){ 
///....... your code 

    aTextField = new JTextField(3); // <---- you are initializing them here 
    add(aTextField); 
    bTextField = new JTextField(3); 
    add(bTextField); 
    cTextField = new JTextField(3); 
    add(cTextField); 
} 

每当访问某个类时,首先在类上下文中声明的字段被初始化。如果没有初始化语句与new一起给出,它们将被初始化为默认值:对象默认初始化为null

请阅读java language specification Chapter 12. Execution

阅读文本字段的文本内容在课堂情境实际上并没有什么意义,所以尽量初始化后他们阅读行为事件的文字或至少。最好使用DocumentListenerJTextComponent的文档来生成关于文本内容更改的事件 。

查看官方教程知道how to use DocumentListener

0

尝试用toString()和请确保输入文本框不为空

int a = Integer.parseInt(aTextField.getText().toString()); 
+0

感谢您的答案,但我仍然得到同样的错误。 – Messing

+0

您在aTextField中输入了什么内容? –

0

我张贴在评论中这样的事情了,不过我想我会的情况下,OP再重新发布想要将此线程标记为已回答。对不起,如果这似乎有点自恋。

此代码正在抛出NPE,因为您正在对尚未初始化的组件调用getText()。在尝试调用对象之前,您需要确保对象已经初始化。