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