Estoy creando un simple MPG aplicación. Se comenzó a mostrar errores después añadí:

String strGallons = gallons1.getText();
int gal = Integer.parseInt(strGallons);
String strMiles = miles1.getText();
int mil = Integer.parseInt(strMiles);
int mpg = mil / gal;
String mpgstring = "" + mpg;

Tengo esta allí para tomar la entrada, convertir a cadena, a continuación, convertir a un número entero, así que lo puedo usar en el MPG fórmula. Muestra que no hay errores en el código, pero una vez que me intento ejecutarlo, se muestra esto:

java.lang.NumberFormatException: For input string: ""
at java.lang.NumberFormatException.forInputString(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at app.<init>(app.java:83)
at app$1.run(app.java:30)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$200(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)

No sé por qué, pero ha estado haciendo esto durante casi 2 días. Mi código es:

import java.awt.BorderLayout;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JTextField;
import javax.swing.JButton;
import javax.swing.JLabel;
public class app extends JFrame {
private String StrMiles;
private String StrGallons;
private int mil;
private int gal;
private int mpg;
private JPanel contentPane;
private JTextField gallons1;
private JTextField miles1;
private JTextField mpgbox;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
app frame = new app();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public app() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 450, 300);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);
gallons1 = new JTextField();
gallons1.setBounds(10, 39, 86, 20);
contentPane.add(gallons1);
gallons1.setColumns(10);
miles1 = new JTextField();
miles1.setBounds(10, 83, 86, 20);
contentPane.add(miles1);
miles1.setColumns(10);
JButton calculate = new JButton("CALCULATE");
calculate.setBounds(204, 80, 110, 23);
contentPane.add(calculate);
JLabel gallons = new JLabel("Gallons");
gallons.setBounds(10, 25, 46, 14);
contentPane.add(gallons);
JLabel miles = new JLabel("Miles");
miles.setBounds(10, 70, 46, 14);
contentPane.add(miles);
JLabel mpgtitle = new JLabel("MPG:");
mpgtitle.setEnabled(false);
mpgtitle.setBounds(189, 204, 46, 14);
contentPane.add(mpgtitle);
String strGallons = gallons1.getText();
int gal = Integer.parseInt(strGallons);
String strMiles = miles1.getText();
int mil = Integer.parseInt(strMiles);
int mpg = mil / gal;
String mpgstring = "" + mpg;
mpgbox = new JTextField();
mpgbox.setText(mpgstring);
mpgbox.setEnabled(false);
mpgbox.setEditable(false);
mpgbox.setBounds(228, 201, 86, 20);
contentPane.add(mpgbox);
mpgbox.setColumns(10);
}
}
InformationsquelleAutor engz | 2014-02-19

2 Comentarios

  1. 2

    Su campo está vacío y que están tratando de convertir una cadena vacía en un número (a través de parseInt()). Eso es lo que está causando el NumberFormatException.

    Para evitar ese tipo de excepción, debe validar su campo. Usted puede escribir una simple verificación de las pruebas si es vacío, mediante la afirmación de que la length() de la Cadena de entrada devuelto por getText() es mayor que cero.

    Usted puede comprobar si un número de la escritura de una expresión regular

    String possibleNumber = yourField.getText();
    boolean isNumber = Pattern.matches("[0-9]+", possibleNumber);
    if(isNumber) {
    number = Integer.parseInt(possibleNumber);
    }

    Pero no debe ser la lectura de los datos en el constructor en el primer lugar. Escribir un controlador de eventos para capturar el evento de la acción de pulsar el botón, y en la lectura de los datos.

    yourButton.addActionListener(new ActionListener() {
    yourText = field.getText();
    }); 
    • Es allí una manera de hacer el parseInt suceder después de golpear el botón de calcular?
    • Sí. Usted debe escribir un controlador de eventos para capturar la acción del botón, y después de que usted lea el campo. Usted no debe leer los campos en el constructor, pero sólo lo utilizan para configurar la interfaz.
  2. 2

    Esta excepción decir :

    java.lang.NumberFormatException: For input string: ""
    at java.lang.NumberFormatException.forInputString(Unknown Source)

    su cadena de entrada está fijado en "" aka una Cadena vacía y, a continuación, intenta analizar la "" en un int. Y eso no es posible y por lo tanto el error.

    Asegúrese de que usted pasa en números como 1 2 3 o algo y sin puntos como la 1.2 ya que así dará un error.

    Debe agregar también un poco de lógica por lo que no es posible pasar en una cadena vacía o atrapar la cadena vacía o un valor doble. Porque va a causar esta excepción cada vez que un usuario no entrada de un formato de número correcto.

Dejar respuesta

Please enter your comment!
Please enter your name here