Java while循环画线

Java while循环画线,java,Java,大家好,我正在做一个来自Java书籍的练习,我需要做的是画线,在一个文本字段中,我必须说线之间的距离必须有多远。所有这些都必须在一个循环中,因此没有硬编码的行 我已经做了所有我认为应该做的事情,但是我的控制台中出现了一些奇怪的错误。错误代码如下所示: 线程“AWT-EventQueue-0”java.lang.NumberFormatException中的异常:用于输入字符串:“” 位于java.lang.NumberFormatException.forInputString(NumberFo

大家好,我正在做一个来自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.\u(JComponent.java:5106) 位于javax.swing.JComponent.paintInstance(JComponent.java:4890) 位于javax.swing.repainmanager.paintDirtyRegions(repainmanager.java:812) 位于javax.swing.repainmanager.paintDirtyRegions(repainmanager.java:714) 位于javax.swing.RepaintManager.prePaintDirtyRegions(RepaintManager.java:694) 在javax.swing.repaitmanager.access$700(repaitmanager.java:41) 在javax.swing.repaitmanager$ProcessingRunnable.run(repaitmanager.java: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:672) 位于java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:296) 位于java.awt.EventDispatchThread.PumpeEventsforFilter(EventDispatchThread.java:211) 位于java.awt.EventDispatchThread.PumpeEventsforHierarchy(EventDispatchThread.java:201) 位于java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java: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?");

    }

}
DrawLines=新的DrawLines();
公共组件(图形g){
超级组件(g);
int positionY=getHeight()-Integer.parseInt(afstand.getText());//绝对定位
int-yPos=0;

while(yPos问题正是它所说的:您在空字符串上调用
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查看差异


否则,您的文本字段中没有整数值。

我想添加一个建议,即在尝试将输入解析为整数之前检查非数字字符的输入。但是,当我开始调试时,它为什么已经检查文本字段?我的意思是它不在构造函数中,所以它必须等到我输入了一个值,或者我正在考虑wrong way?@Fildor我已经这样做了-尽管检查可能应该在组件本身中进行,例如通过文档,而不是在paintComponent方法中进行。@Reshad
paintComponent
在组件可见时被调用-这意味着您还没有时间输入任何内容(除非在显示前填充字段)。@assylias我同意。我想这是一个特殊情况。