使用带有Integer.parseInt()的.getText()时出错

时间:2017-06-23 12:32:58

标签: java

所以我试图创建一个程序,当一个整数,即5,输入textarea时,点击三个按钮之一,它运行一个方法,从textarea获取整数并将其放入for循环。我现在不关心这些方法,我只是想让我的程序运行。

import java.awt.event.*;
import javax.swing.*;

public class Main {

static JTextField textfield = new JTextField("Enter the size of your shape: ");
static String size = textfield.getText();
static int w = Integer.parseInt(size);
static JTextArea textarea = new JTextArea(6, 37) ;

public static void main(String[] args) {
    JFrame f = new JFrame();// creating instance of JFrame

    JButton bSquare = new JButton("Square");// creating instance of JButton
    JButton bRATriangle = new JButton("Right Angle Triangle");// creating instance of JButton
    JButton bETriangle = new JButton("Equilateral Triangle");// creating instance of JButton

    bSquare.setBounds(50, 100, 100, 40);// x axis, y axis, width, height
    bRATriangle.setBounds(250, 100, 100, 40);// x axis, y axis, width, height
    bETriangle.setBounds(450, 100, 100, 40);// x axis, y axis, width, height
    textfield.setBounds(200, 200, 200, 80);

    bSquare.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            for(int i = 0; i > w; i++) {
                textfield.setText("YEAH BOIIIIIII!");
            }
        }
    });

当我尝试运行程序时,出现以下错误:

Exception in thread "main" java.lang.ExceptionInInitializerError
Caused by: java.lang.NumberFormatException: For input string: "Enter the size of your shape: "
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:580)
at java.lang.Integer.parseInt(Integer.java:615)
at Main.<clinit>(Main.java:8)

有关如何修复它的任何想法? 提前谢谢。

2 个答案:

答案 0 :(得分:1)

这一切都是静态的

static JTextField textfield = new JTextField("Enter the size of your shape: ");
static String size = textfield.getText();
static int w = Integer.parseInt(size);
static JTextArea textarea = new JTextArea(6, 37) ;

所以在课程加载后执行它们并没有给你机会提供输入......

解决方案是:不要使用静态对象,此JTextField文本字段应为空,仅用于输入数字

答案 1 :(得分:0)

您解析String以将其转换为字段声明中的Integer

static String size = textfield.getText();
int w = Integer.parseInt(size);

没有意义。
您应该将监听器添加到textfield字段,并且在此监听器中使用try / catch执行此转换。
由于您不确定输入是Integer,您应该处理异常情况。

例如:

textfield.addActionListener(new ActionListener() {
  public void actionPerformed(ActionEvent e) {
     try{
       w = Integer.parseInt(textfield.getText());
     }
      catch(NumberFormatException nfe){
         ... // handle the exception
      } 
  }
 }