Java 正方形分割程序不绘制

Java 正方形分割程序不绘制,java,swing,for-loop,Java,Swing,For Loop,我又回到了Java,我试图制作一个有一个正方形的程序,这个正方形变成了更小的相等正方形,这些正方形变成了4个更小的正方形,以此类推,但是当我试着运行这个程序时,它什么都不做 这是我的密码: package main; import java.awt.Graphics; import java.util.ArrayList; import javax.swing.JPanel; public class mainPanel extends JPanel { @SuppressWarn

我又回到了Java,我试图制作一个有一个正方形的程序,这个正方形变成了更小的相等正方形,这些正方形变成了4个更小的正方形,以此类推,但是当我试着运行这个程序时,它什么都不做

这是我的密码:

package main;

import java.awt.Graphics;
import java.util.ArrayList;
import javax.swing.JPanel;

public class mainPanel extends JPanel {

    @SuppressWarnings("rawtypes")

    ArrayList rects = new ArrayList();

    int rectangles = 1;
    int x = 1;
    int y = 1;
    int size = 1000;

    long lastTime = System.nanoTime();
    int frames = 0;
    int fps = 0;

    public mainPanel() {
        setDoubleBuffered(true);
        rects.add(new cube(x, y, size));

        Thread t = new Thread() {
            public void run() {
                while (1 != 2) {
                    repaint();
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        Thread.currentThread().interrupt();
                    }
                }
            }
        };

        t.start();

    }

    @SuppressWarnings("unchecked")
    public void paint(Graphics g) {

        super.paint(g);

        Graphics g2 = g;

        for (int i = 0; i < rectangles; i++) {
            g.fillRect(x, y, size, size);

            size /= 4;
            x += size / 2 + 1;
            y += size / 2 + 1;
            rectangles += 4;
        }

        frames++;
        if (System.nanoTime() - lastTime >= 1000000000) {
            fps = frames;
            frames = 0;
            lastTime = System.nanoTime();
        }

        g.drawString("FPS: " + fps, 5, 15);
        g.dispose();
    }

}

当我运行程序时,即使我将睡眠功能降低到1000ms,也不会绘制任何方块,随着时间的推移,我的fps会降低很多。

记住,Swing不是线程安全的;,在未创建的图形上下文上调用dispose也会产生副作用,例如不在屏幕上绘制任何内容,所以请小心立方体是什么?考虑提供一个说明你的问题的方法。这将减少混乱和更好的响应您可以使用Swing计时器而不是无限循环,您应该只绘制组件的状态,绘制方法应该包含尽可能少的逻辑。我认为您最大的问题是没有意识到在Swing中绘制,事实上大多数GUI都是破坏性的,不复利。查看和了解有关如何进行绘画的更多详细信息。。