JFormatedTextField DocumentListener包含java.lang.IllegalStateException

时间:2014-01-18 05:56:00

标签: java swing illegalstateexception numberformatexception documentlistener

我的程序应该根据用户想要获得的产品数量打印交易价格,JFormatedTextField上的用户类型和documentListener通知更改,但是当用户错误地删除程序时,程序就会死亡。 `

    final JFormattedTextField quantityTextField = new JFormattedTextField((Integer) null);
    //Check for changes.
    quantityTextField.getDocument().addDocumentListener(new DocumentListener() {
          @Override
        public void changedUpdate(DocumentEvent e) {
              if(quantityTextField.getText()!=null){
                  totalPrice = (Integer.valueOf(quantityTextField.getText()).intValue())* unitaryPrice ;
                    priceToShow.setText(""+totalPrice);
                  }else{
                      totalPrice=0;
                      quantityTextField.setText("0");
                  }
          }
          @Override
        public void removeUpdate(DocumentEvent e) {   //Here is the problem the text on the field isnt equals to "" or null (when is empty)
              if(quantityTextField.getText()!=null && quantityTextField.getText()!=""){
                  totalPrice = (Integer.valueOf(cuantityTextField.getText()).intValue())* unitaryPrice ;
                  priceToShow.setText(""+totalPrice);
              }else{
                  totalPrice=0;
                  quantityTextField.setText("0");
              }
          }
          @Override
        public void insertUpdate(DocumentEvent e) {
              System.out.println("\n++ Insert");
              totalPrice = (Integer.valueOf(quantityTextField.getText()).intValue())* unitaryPrice ;
                priceToShow.setText(""+totalPrice);
          }
    }); 

当用户错误后为空时,编译器会抛出java.lang.IllegalStateException,将“”转换为int。如果文本为空或null并且将总价格设置为0,则removeUpdate侦听器中的if子句应处理,但条件永远不会达到,我不知道为什么。

请帮忙。

2 个答案:

答案 0 :(得分:1)

将代码包裹在SwingUtilities.invokeLater()

BTW quantityTextField.getText()!="“无效。请改用equals()。

答案 1 :(得分:1)

您也可以使用quantityTextField.getText().length() > 0来避免处理空格。