Java JFrame setSize会导致延迟

Java JFrame setSize会导致延迟,java,swing,graphics,jframe,frame-rate,Java,Swing,Graphics,Jframe,Frame Rate,我有一个简单的东西,我正在用Java进行测试 package us.superdisk.Teststs; import java.awt.Dimension; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.MouseInfo; import java.awt.PointerInfo; import javax.swing.*; public class Main { public sta

我有一个简单的东西,我正在用Java进行测试

package us.superdisk.Teststs;

import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.MouseInfo;
import java.awt.PointerInfo;

import javax.swing.*;

public class Main 
{
    public static void main(String[] argv) {
    JFrame jf = new JFrame("test");
    jf.setVisible(true);

    //jf.setSize(new Dimension(512, 512));

    Graphics g = jf.getGraphics();

    PointerInfo a;
    while (true) {
        a = MouseInfo.getPointerInfo();
        g.drawLine(0, 50, (int)a.getLocation().getX(), (int)a.getLocation().getY());

    }

    }
}
这将向鼠标光标绘制一条线

创建时,窗口非常小且不可见,您必须调整其大小才能看到线条。然而,线条画是流畅的


当您取消注释
setSize
位时,线条绘制要比未注释时慢得多。。。这对我来说没什么意义?问题是什么?

是关于您的问题的几条有用评论中建议的方法的一个例子。该示例包括键绑定,因此您可能希望将重点放在更早、更简单的方法上。

对于同一任务,您应该实现
MouseMotionListener
,这将比无限循环中的轮询效率更高。而且决不能通过
getGraphics()
(除非是在非常特殊的情况下,例如打印或需要在BuffereImage上绘制组件)。教程将向您展示执行此操作的最佳方法。不要对任何对象调用
setSize()
。而是重写JComponent派生对象的
getPreferredSize()
,并调用
pack()
在JFrame上。1.永远不要使用图形g=jf.getGraphics();,2.很好地解决了这个问题,不是真正的问题,3.@SuperDisk:不,换个角度考虑:你正在学习如何正确地做事。:)