Java,而添加变量时循环崩溃-->;白色、无响应的JFrame

Java,而添加变量时循环崩溃-->;白色、无响应的JFrame,java,swing,while-loop,Java,Swing,While Loop,我正在编写这个Java教程,它让我编写了一个窗口来绘制水平线,并允许用户更改线之间的距离。问题是,一切都运行得很好,直到我将距离变量添加到while循环,然后窗口变为空白并且没有响应-但它不会报告任何错误。我已经把整件事重写了四次,并且用不同的方式写了出来(do while/while/for),但问题似乎一直是个变量。我不知道我做错了什么 下面是课程: package h03horizontalelijnen2; import java.awt.*; import java.awt.even

我正在编写这个Java教程,它让我编写了一个窗口来绘制水平线,并允许用户更改线之间的距离。问题是,一切都运行得很好,直到我将距离变量添加到while循环,然后窗口变为空白并且没有响应-但它不会报告任何错误。我已经把整件事重写了四次,并且用不同的方式写了出来(do while/while/for),但问题似乎一直是个变量。我不知道我做错了什么

下面是课程:

package h03horizontalelijnen2;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Paneel extends JPanel implements ActionListener {

    //declaratie objecten & variabelen
    private int afstand; // variabele voor afstand tussen lijnen
    private int yWaarde; //variabele voor yWaarde lijnen
    private JTextField inputAfstand; // tekstveld voor input afstand
    private JButton tekenKnop; // tekenknop

    public Paneel(){ //bevat tekstveld, knop & label
    //creatie objecten
    inputAfstand = new JTextField("2", 2); //creatie tekstvak: 2 getallen
    inputAfstand.addActionListener(this); //luistert naar actie
    inputAfstand.setToolTipText("Vul in dit vak de afstand tussen de lijnen in"); //tooltip

    tekenKnop = new JButton("Teken lijnen"); //creatie knop
    tekenKnop.addActionListener(this); //luistert naar actie
    inputAfstand.setToolTipText("Klik om de lijnen opnieuw te tekenen"); //tooltip

    //elementen aan paneel toevoegen
    add(new JLabel ("Afstand tussen de lijnen: "));
    add(inputAfstand);
    add(tekenKnop);
    }

    public void paintComponent(Graphics g){ //teken lijnen
        super.paintComponent(g);
        g.setColor(Color.RED); //maak kleur rood
        int onder = getHeight(); //bepaal hoogte scherm
        int midden = getHeight() /2; // midden
        int eindeScherm = getWidth();
        yWaarde = midden; // variabele voor yWaarde, startpunt = midden

        while (yWaarde <= onder) {
            g.drawLine(0, yWaarde, eindeScherm, yWaarde);
            yWaarde = yWaarde + afstand;
        }
    }

    public void bepaalAfstand(){ //haal getal uit inputAfstand tekstvak
        afstand = Integer.parseInt(inputAfstand.getText());
    }

    public void actionPerformed(ActionEvent e) { //klikken triggert:
        bepaalAfstand(); //bepaal input afstand
        repaint(); //opnieuw tekenen

    }

}
包装h03horizontalelijnen2;
导入java.awt.*;
导入java.awt.event.*;
导入javax.swing.*;
公共类Paneel扩展JPanel实现ActionListener{
//declaratie objecten&variabelen
私人国际展台;//variabele voor afstand tussen lijnen
瓦瓦德私人酒店;//variabele voor YWARDE lijnen
私有JTextField inputAfstand;//tekstveld voor input afstand
私有JButton tekenKnop;//tekenKnop
公共面板(){//bevat技术等级、旋钮和标签
//创造性异议
inputAfstand=newjtextfield(“2”,2);//creatie-tekstvak:2 getallen
inputAfstand.addActionListener(this);//luistert naar actie
inputAfstand.setToolTipText(“Vul in dit vak de afstand tussen de lignen in”);//工具提示
tekenKnop=new JButton(“Teken lijnen”);//creatie knop
tekenKnop.addActionListener(此);//luistert naar actie
inputAfstand.setToolTipText(“Klik om de lijnen opnieuw te tekenen”);//工具提示
//阿安·帕内尔·托沃根元素酒店
增加(新的JLabel(“Afstand tussen de lijnen:”);
添加(InputStand);
添加(tekenKnop);
}
公共组件(图形g){//teken Lignen
超级组件(g);
g、 setColor(Color.RED);//maak kleur rood
int onder=getHeight();//bepaal hoogte scherm
int midden=getHeight()/2;//midden
int eindeScherm=getWidth();
YWARDE=midden;//变量voor YWARDE,startpunt=midden

while(yWaarde正如khelwood已经指出的,问题是变量
afstand
永远不会被
bepaalAfstand()
初始化。它是0,因此您永远不会退出while循环,因为
yWaarde=yWaarde+afstand;
不会更改值

我不确定您在这里想做什么,因为您的变量和方法名称不是英文的

也许这很简单,只需在你的while外观上添加一个gard条件

while(yWaarde 0)

问候,, 雷纳

如果:

afstand = Integer.parseInt(inputAfstand.getText());
结果为0时,您将陷入while循环。 因此,如果您的InputStand从0开始,您就会遇到麻烦


您可以通过测试0或将inputAfstand初始化为1来修复它。

如果在调用
bepaalAfstand()
之前调用
paintComponent()
afstand
将为零,而
while
循环将永远不会结束。@khelwood我交换了bepaalAfstand()和paintComponent()大约,但问题仍然存在。交换两种方法来尝试修复此错误毫无意义。您需要考虑在调用
bepaalAfstand
之前
paintComponent
的预期行为。可以简单地将
afstand
初始化为1。谢谢!我还以为是通过设置“2”来初始化它的在文本字段中,它应该从中获取其值,但不知怎么的,它不起作用。这修复了它。请将我的答案标记为解决问题的答案(如果是)-谢谢