Java 为什么可以';我画线时不使用无限运行的while循环吗

Java 为什么可以';我画线时不使用无限运行的while循环吗,java,swing,Java,Swing,我必须使用一个永久运行的while循环来绘制线条,否则线条渲染一毫秒后就会消失。它看起来可能很好,但我可能会在一个循环中添加成百上千的方法,这可能会导致一些性能问题 调试(主类) 窗口(创建窗口的类) 渲染器(绘制对象的类) 您需要在paint()中调用draw()方法,对于JAVA中的Canvas,paint()方法绘制此画布。无需在Debug类中显式调用它 完全移除while循环及其内部内容。在renderr3d类中,修改画布创建部分,如下所示: public Canvas canvas =

我必须使用一个永久运行的while循环来绘制线条,否则线条渲染一毫秒后就会消失。它看起来可能很好,但我可能会在一个循环中添加成百上千的方法,这可能会导致一些性能问题

调试(主类)

窗口(创建窗口的类)

渲染器(绘制对象的类)


您需要在
paint()
中调用
draw()
方法,对于JAVA中的
Canvas
paint()
方法绘制此画布。无需在
Debug
类中显式调用它

完全移除while循环及其内部内容。在
renderr3d
类中,修改画布创建部分,如下所示:

public Canvas canvas = new Canvas() {
    public void paint(Graphics g) {
        draw();
    }
};

你的问题是什么?你可以使用这个物体每x毫秒重复一个动作。此外,此组件在大多数情况下用于解决您的问题。我的问题是如何删除while循环,但如果删除它,将不会产生任何效果
public class Window 
    static int width;
    static int height;
    static int x;
    static int y;
    static boolean v;
    static String title;
    
    public Window() {}
    
    public Window(int WIDTH, int HEIGHT, int X, int Y, boolean V, String TITLE) {
        // TODO Auto-generated constructor stub
        width = WIDTH;
        height = HEIGHT;
        x = X;
        y = Y;
        v = V;
        title = TITLE;
    }

    public static JFrame window = new JFrame();

    public void setWindowVisible(boolean v) {
        window.setVisible(v);
    }

    public void setWindowSize(int Width, int Height) {
        window.setSize(Width, Height);
    }

    public void setWindowLocation(int X, int Y) {
        window.setLocation(X, Y);
    }
    
    public void setWindowTitle(String TITLE) {
        window.setTitle(TITLE);
    }

    public static void displayProperties() {
        window.setSize(width, height);
        window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        window.setLocation(x, y);
        window.setTitle(title);
        window.setVisible(v);
        window.setLocationRelativeTo(null);
    }
    
    public void addRenderer() {
        window.pack();
        displayProperties();
    }
    
    public JFrame returnWindow() {
        return window;
    }
}
public class Renderer3D extends JFrame {
    public boolean executed;
    public boolean running = true;
    public Thread thread;

    public Canvas canvas = new Canvas() {
        public void paint(Graphics g) { 
        }
    };

    @SuppressWarnings("deprecation")
    public Renderer3D() {
        canvas.setBackground(Color.black);
        Window.window.add(canvas);
        Window.displayProperties();
        Window.window.show();
    }
    
    public void draw() {
        if (canvas == null) {
            canvas.createBufferStrategy(3);
        }
        
        Graphics g = canvas.getGraphics();
        g.setColor(Color.BLUE);
        g.drawLine(100, 100, 300, 300);
    }
}
public Canvas canvas = new Canvas() {
    public void paint(Graphics g) {
        draw();
    }
};