2016-02-07 108 views
0

我是一名Android開發人員但是現在我需要使用awt.I開發一個桌面套接字服務器,我寫了一個非常小的演示來顯示一些使用Shape的行,但是它非常慢。爲什麼我的java awt代碼運行速度很慢?

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知之甚少。 有人可以告訴我爲什麼我的演示在繪製一些行後運行得如此緩慢嗎? 非常感謝。

回答

0

請注意,您正在主線程中執行多項操作。考慮使用後臺任務。這將使UI性能變得更好。

+0

你的建議是非常有用的,但改變的drawLine()到一個新的線程後,它也需要太多的CPU resource.Confused。 –

+0

攔截器是你的套接字連接..我相信你是從套接字讀取數據來畫線? –

0

我對服務器和套接字的東西不是很好,但是如果你添加了'-Dsun.java2d.opengl = true'這個選項,它可能會提升一點點,因爲一般情況下Java2D和AWT不是以其速度而聞名。

希望這將有助於:)

相關問題