I'm in beginning programming and I don't fully understand applets yet. However, (with some help from internet tutorials) I was able to create an applet that plays a game of guess with the user. The applet compiles fine, but when it runs, this error message appears:
"Exception in thread "main" java.lang.NumberFormatException: For input string: ""
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
at java.lang.Integer.parseInt(Integer.java:470)
at java.lang.Integer.parseInt(Integer.java:499)
at Guess.createUserInterface(Guess.java:101)
at Guess.<init>(Guess.java:31)
at Guess.main(Guess.java:129)"
I've tried moving the " userguess = Integer.parseInt( t1.getText() );
" on line 101 to multiple places, but I still get the same error. Can anyone tell me what I'm doing wrong? The Code:
// Creates the game GUI.
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Guess extends JFrame{
private JLabel userinputJLabel;
private JLabel lowerboundsJLabel;
private JLabel upperboundsJLabel;
private JLabel computertalkJLabel;
private JButton guessJButton;
private JPanel guessJPanel;
static int computernum;
int userguess;
static void declare() {
computernum = (int) (100 * Math.random()) + 1; //random number picked (1-100)
}
// no-argument constructor
public Guess()
{
createUserInterface();
}
// create and position GUI components
private void createUserInterface()
{
// get content pane and set its layout
Container contentPane = getContentPane();
contentPane.setLayout( null );
contentPane.setBackground( Color.white );
// set up userinputJLabel
userinputJLabel = new JLabel();
userinputJLabel.setText( "Enter Guess Here -->" );
userinputJLabel.setBounds( 0, 65, 120, 50 );
userinputJLabel.setHorizontalAlignment( JLabel.CENTER );
userinputJLabel.setBackground( Color.white );
userinputJLabel.setOpaque( true );
contentPane.add( userinputJLabel );
// set up lowerboundsJLabel
lowerboundsJLabel = new JLabel();
lowerboundsJLabel.setText( "Lower Bounds Of Guess = 1" );
lowerboundsJLabel.setBounds( 0, 0, 170, 50 );
lowerboundsJLabel.setHorizontalAlignment( JLabel.CENTER );
lowerboundsJLabel.setBackground( Color.white );
lowerboundsJLabel.setOpaque( true );
contentPane.add( lowerboundsJLabel );
// set up upperboundsJLabel
upperboundsJLabel = new JLabel();
upperboundsJLabel.setText( "Upper Bounds Of Guess = 100" );
upperboundsJLabel.setBounds( 250, 0, 170, 50 );
upperboundsJLabel.setHorizontalAlignment( JLabel.CENTER );
upperboundsJLabel.setBackground( Color.white );
upperboundsJLabel.setOpaque( true );
contentPane.add( upperboundsJLabel );
// set up computertalkJLabel
computertalkJLabel = new JLabel();
computertalkJLabel.setText( "Computer Says:" );
computertalkJLabel.setBounds( 0, 130, 100, 50 ); //format (x, y, width, height)
computertalkJLabel.setHorizontalAlignment( JLabel.CENTER );
computertalkJLabel.setBackground( Color.white );
computertalkJLabel.setOpaque( true );
contentPane.add( computertalkJLabel );
//Set up guess jbutton
guessJButton = new JButton();
guessJButton.setText( "Enter" );
guessJButton.setBounds( 250, 78, 100, 30 );
contentPane.add( guessJButton );
guessJButton.addActionListener(
new ActionListener() // anonymous inner class
{
// event handler called when Guess button is pressed
public void actionPerformed( ActionEvent event )
{
guessActionPerformed( event );
}
} // end anonymous inner class
); // end call to addActionListener
// set properties of application's window
setTitle( "Guess Game" ); // set title bar text
setSize( 500, 500 ); // set window size
setVisible( true ); // display window
//create text field
TextField t1 = new TextField(); // Blank text field for user input
t1.setBounds( 135, 78, 100, 30 );
contentPane.add( t1 );
userguess = Integer.parseInt( t1.getText() );
//create section for computertalk
Label computertalkLabel = new Label("");
computertalkLabel.setBounds( 115, 130, 300, 50);
contentPane.add( computertalkLabel );
}
// Display computer reactions to user guess
private void guessActionPerformed( ActionEvent event )
{
if (userguess > computernum) //if statements (computer's reactions to user guess)
computertalkJLabel.setText( "Computer Says: Too High" );
else if (userguess < computernum)
computertalkJLabel.setText( "Computer Says: Too Low" );
else if (userguess == computernum)
computertalkJLabel.setText( "Computer Says:You Win!" );
else
computertalkJLabel.setText( "Computer Says: Error" );
} // end method oneJButtonActionPerformed
// end method createUserInterface
// main method
public static void main( String args[] )
{
Guess application = new Guess();
application.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
} // end method main
} // end class Phone
Please do not use null
layout.
As it appears from the error message, you are pressing the button to enter the number without actually writing anything in the input. You need to handle that condition.
You need to replace :
userguess = Integer.parseInt( t1.getText() );
with:
String userEntered = t1.getText().trim();
if(userEntered.equals("")){
System.out.println("You did not enter anything");
}else{
try{
userguess = Integer.parseInt( userEntered );
}catch(NumberFormatException e){
System.out.println("Invalid format");
}
}
java.lang.NumberFormatException: For input string: ""
This means it is getting called on the empty string "". This is not a number format so it raises an exception.
You need to make sure to call it after the user has input information, and you probably want to either validate the input or handle this exception for the cases where a user does something weird.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.