2013-12-08 44 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()。在嘗試調用對象之前,您需要確保對象已經初始化。