重置按钮java中的问题

时间:2014-12-27 19:35:42

标签: java user-interface

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

public class Guess extends JFrame
{
private JLabel l1;
private JLabel l2;
private JTextField t1;
private JButton b[]=new JButton[2];

static Random r1=new Random();
int rand=r1.nextInt(1000)+1;

public Guess()
{
    super("Guess the number game ");
    l1=new JLabel("Guess The number");
    l2=new JLabel(" ");
    t1=new JTextField(5);
    b[0]=new JButton("Check");
    b[1]=new JButton("Reset");

    setLayout(new FlowLayout());

    add(l1);
    add(t1);


    perform action=new perform();
    resettt reseting=new resettt();
    add(b[0]);
    b[0].addActionListener(action);
    add(b[1]);
    b[1].addActionListener(reseting);
    add(l2);


}

private class perform implements ActionListener
{
    public void actionPerformed(ActionEvent e)
    {
            String s1=t1.getText();
            int g=Integer.parseInt(s1);


            if(g>rand)
            {
                l2.setText("Too high");
                t1.setBackground(Color.CYAN);
            }
            else if(g<rand)
            {
                l2.setText("Too low");
                t1.setBackground(Color.RED);
            }
            else if(g==rand)
            {
                t1.setBackground(Color.WHITE);
                t1.setEditable(false);
                t1.setText("Correct");
                l2.setText(" ");
            }//end of last if
    }//end of actionPerformed
}//end perform

private class resettt implements ActionListener
    {
        public void actionPerformed(ActionEvent e)
        {
                t1.setText(" ");
                t1.setBackground(Color.WHITE);
                t1.setEditable(true);
                l2.setText(" ");
                rand=r1.nextInt(1000)+1;


        }
    }

public static void main(String args[])
{
    Guess t=new Guess();
    t.setVisible(true);
    t.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    t.setSize(350,100);
    t.setLocationRelativeTo(null);
}
}

现在的问题是,当我按下重置按钮时,它会显示几个错误

注意:错误不是在构建程序之后,它会在单击RESET按钮后在CMD中显示一些脚本

这些是错误:

Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: For input string: " 1"
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
    at java.lang.Integer.parseInt(Integer.java:481)
    at java.lang.Integer.parseInt(Integer.java:527)
    at Guess$perform.actionPerformed(Guess.java:47)
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
    at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)

2 个答案:

答案 0 :(得分:1)

您的解决方案很简单:

Integer.parseInt(s1);与[{1}}交换,可能事先添加Integer.parseInt(s1.trim());

https://docs.oracle.com/javase/6/docs/api/java/lang/String.html#trim()

  

public String trim()返回字符串的副本,带有前导和   尾随空格省略。如果此String对象表示空   字符序列,或字符的第一个和最后一个字符   此String对象表示的序列都具有更大的代码   比'\ u0020'(空格字符),然后是对这个字符串的引用   返回对象。

     

否则,如果没有代码大于'\ u0020'的字符   在字符串中,然后是一个表示空字符串的新String对象   已创建并返回。

     

否则,让k为字符串中第一个字符的索引   其代码大于'\ u0020',并且让m为索引   字符串中的最后一个字符,其代码大于'\ u0020'。一个   创建新的String对象,表示此子字符串   以索引k处的字符开头并以。结尾的字符串   索引m处的字符,即this.substring(k,m + 1)的结果。

     

此方法可用于从中修剪空白(如上所述)   字符串的开头和结尾。

     

返回:此字符串的副本,包含前导和尾随空格   如果没有前导空格或尾随空格,则删除此字符串。

https://docs.oracle.com/javase/6/docs/api/java/lang/String.html#matches(java.lang.String)

  

public boolean matches(String regex)判断此字符串是否为空   匹配给定的正则表达式。调用这种方法   形式str.matches(正则表达式)产生与结果完全相同的结果   表达

     

Pattern.matches(regex,str)参数:regex - 正则表达式   要匹配此字符串返回:如果且仅当,   此字符串匹配给定的正则表达式抛出:   PatternSyntaxException - 如果正则表达式的语法无效   以来:   1.4参见:模式

答案 1 :(得分:1)

单击“重置”时,可能未显示此例外情况。但是当点击“检查”时按钮 后重置和一些新输入。

错误的原因是,在尝试将其解析为int之前,您不会测试文本字段中的输入是否为实数。您还可以将输入文本字段的文本设置为空白而不是空字符串"",这会使输入包含非数字字符并且无法解析。

您应该使用仅过滤整数输入的文本字段see an example here