为什么我的java awt代码运行速度很慢?

时间:2016-02-07 16:35:00

标签: java awt java-2d

我是Android开发人员但是现在我需要使用awt开发一个桌面套接字服务器。我写了一个非常小的演示来显示使用Shape的一些行,但它很慢。

public class Main {

    public static void drawLine(double x1,double y1,double x2,double y2,GeneralPath generalPath,int size){
        Line2D line2D = new Line2D.Double(x1, y1, x2, y2);
        Line2D line2D2 = new Line2D.Double(x2, y2 + size, x1, y1 + size);
        generalPath.append(line2D, false);
        generalPath.append(line2D2, true);
    }

    public static void main(String[] args) {
        SocketServer socketServer = new SocketServer(8890);
        socketServer.startListen();

        Window w = new Window(null) {
            GeneralPath generalPath = new GeneralPath();
            int i = 0;
            @Override
            public void paint(Graphics g) {
                Graphics2D g2d = ((Graphics2D) g);

                Vector<Action> v = socketServer.v;
                for (; i < v.size() - 1; i++) {
                    Action action = v.get(i);
                    if(action.type != action.ACTION_DOWN){
                        Action preAction = v.get(i-1);
                        drawLine(preAction.x,preAction.y,action.x,action.y,generalPath,1);
                    }
                }

                setShape(generalPath);
            }

            @Override
            public void update(Graphics g) {
                paint(g);
            }
        };
        w.setAlwaysOnTop(true);
        w.setBounds(w.getGraphicsConfiguration().getBounds());
        w.setVisible(true);
        while (true) {
            try {
                Thread.sleep(50);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            w.repaint();
        }
    }
}

我想从套接字中绘制实时路径,所以我需要一直重新绘制。我还需要提供点击行为,所以我必须使用形状。

我对awt知之甚少。有人可以告诉我为什么我的演示在绘制一些线后运行得如此之慢的问题? 非常感谢。

2 个答案:

答案 0 :(得分:0)

请注意,您在主线程中执行了多项操作。考虑使用后台任务。这将使UI性能更好。

答案 1 :(得分:0)

我不太喜欢Server和Socket的东西,但是如果你添加选项'-Dsun.java2d.opengl = true',它可能会提升渲染一点,因为Java2D和AWT一般都不知道因为它的速度。

希望它会有所帮助:)