Java в то время как цикл рисования линий

Привет всем, я пытаюсь выполнить упражнение из книги по Java, и мне нужно нарисовать линии, а в текстовом поле я должен сказать, как далеко должно быть расстояние между линиями. Все это должно быть в цикле, чтобы не было жестко закодированных строк.

Я сделал все, как я думал, что это должно быть сделано, но я получаю странную ошибку в моей консоли, которая продолжает появляться. код ошибки следующий:

Исключение в потоке "AWT-EventQueue-0" java.lang.NumberFormatException: для входной строки: "" в java.lang.NumberFormatException.forInputString(NumberFormatException.java:48) в java.lang.Integer.parseInt(Integer.java:470) в java.lang.Integer.parseInt(Integer.java:499) в h03.LinePanel.paintComponent(LinePanel.java:30) в javax.swing.JComponent.paint(JComponent.java:1037) в javax.swing.JComponent._paintImmediately(JComponent.java:5106) по адресу javax.swing.JComponent.paintImmediately(JComponent.java:4890) по адресу javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.jav:Manager.java:8g.java:714) на javax.swing.RepaintManager.prePaintDirtyRegions(RepaintManager.java:694) на javax.swing.RepaintManager.access$700(RepaintManager.java:41) на javax.swing.RepaintManager$ProcessingRunjManager.:1672) в java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209) в java.awt.EventQueue.dispatchEventImpl(EventQueue.java:702) в java.awt.EventQueue.access$400(EventQueue.java:82) в java.awt.EventQueue$2.run(EventQueue.java:663) в java.awt.EventQueue$2.run(EventQueue.java:661) в java.security.AccessController.doPrivileged(собственный метод) в java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87) в java.awt.EventQueue.dispatchEvent(EventQueue.java.2).pumpOneEventForFilters(EventDispatchThread.java:296) в java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:211) в java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDava.DefDefatch):196) в java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:188) в java.awt.EventDispatchThread.run(EventDispatchThread.java:122)

Так как я новичок в Java, я не знаю, что я сделал неправильно и как устранить эту ошибку, поэтому я был бы признателен за любую помощь! код в моей панели, который я использую для этого

DrawLines lines = new DrawLines();

public void paintComponent(Graphics g) {

    super.paintComponent(g);
    int positionY = getHeight() - Integer.parseInt(afstand.getText()); // absolut positioning

    int yPos = 0;

    while(yPos <= positionY) {

        lines.drawLines(g, 0, yPos, getWidth(), yPos);
        yPos = yPos + Integer.parseInt(afstand.getText());
    }

}

public void actionPerformed(ActionEvent e) {

    try {

        repaint();


    }
    catch(NumberFormatException err) {

        JOptionPane.showMessageDialog(null, "something went wrong! heeft u wel    een waarde opgegeven?");

    }

}

2 ответа

Вопрос именно в том, что он говорит: вы звоните Integer.parseInt() на пустой строке, в вашем примере: afstand.getText()и это не нравится.

java.lang.NumberFormatException: For input string: "" at
[...]
java.lang.Integer.parseInt(Integer.java:470) at java.lang.Integer.parseInt(Integer.java:499)

Чтобы избежать исключения, вы можете поймать исключение:

try {
    int input = Integer.parseInt(afstand.getText());
    //rest of your code
} catch (NumberFormatException e) {
    //let the use know that the entry is invalid
}

getText().toString(), чтобы получить значение вашего текстового поля. Вы можете попробовать System.out.println(afstand.getText) и с toString, чтобы увидеть разницу.

В противном случае в вашем текстовом поле нет целочисленного значения.

Другие вопросы по тегам