Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我的程序以意外的数量通过循环_Java_Loops_Panel - Fatal编程技术网

Java 我的程序以意外的数量通过循环

Java 我的程序以意外的数量通过循环,java,loops,panel,Java,Loops,Panel,正如标题澄清的那样,我的一个循环在玩弄它之后只应该通过它一次,这使得它最明显地通过了两次,有时是三次 这很奇怪,我删掉了所有让我困惑的东西,对java还是很陌生的,但它并没有改变任何东西。 因此,我现在知道这与小组有某种关系,但我一辈子也搞不清楚,可能是什么问题。我甚至删除了所有的getter和setter。不知怎的,这个循环运行了2-3次。 最初我让它画点,但在它表现出一些奇怪的行为后,我试图找出它,因为代码只是从一个在线教程,甚至尝试打破;但是没有用 这是我的密码: public class

正如标题澄清的那样,我的一个循环在玩弄它之后只应该通过它一次,这使得它最明显地通过了两次,有时是三次

这很奇怪,我删掉了所有让我困惑的东西,对java还是很陌生的,但它并没有改变任何东西。 因此,我现在知道这与小组有某种关系,但我一辈子也搞不清楚,可能是什么问题。我甚至删除了所有的getter和setter。不知怎的,这个循环运行了2-3次。 最初我让它画点,但在它表现出一些奇怪的行为后,我试图找出它,因为代码只是从一个在线教程,甚至尝试打破;但是没有用

这是我的密码:

public class drawDot extends JPanel {

    //GetterSetter gs = new GetterSetter();

    public void paintComponent(Graphics g) {
        //super.paintComponent(g);

        //Graphics2D g2d = (Graphics2D) g;

        //g2d.setColor(Color.black);
        // Random r = new Random();

        for (int i = 0; i <= 0;i++) {
            // int y = 50;
            //g2d.fillOval(gs.getX(), y, 30, 30);
            // gs.setX(gs.getX()+30);
            System.out.println("30");
            break; 
        }
    }

    public static void main(String[] args) {
        drawDot points = new drawDot();
        JFrame frame = new JFrame("Points");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add(points);
        frame.setSize(250, 200);
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
   }

}

无论何时重新绘制JPanel,它都会调用paintComponent。它可以在程序执行期间多次重新绘制

您可以在类中创建一个静态变量paintCounter,然后将其与循环索引一起在循环中打印出来,以查看在单次调用paintComponent期间循环运行了多少次

private static paintCounter = 0;
public void paintComponent(Graphics g) {
    paintCounter = paintCounter + 1;

    for (int i = 0; i < 1; i++) {
        System.out.println("30");
        System.out.println("PaintComponent called " + paintCounter + " times, loop index " + i);
    }
}

为什么要对只需要执行一次的内容使用循环?每次Swing调用paintComponent方法时,循环都会运行一次。Swing在认为必须重新绘制组件时调用paintComponent,如果您的程序运行较长时间,可能会调用数百次。谢谢!因此,油漆组件就是问题所在。Thx^^^另外:它只循环一次,因为我试图将问题简化到其根源,包括将循环减少到1。