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, чтобы увидеть разницу.
В противном случае в вашем текстовом поле нет целочисленного значения.