我是一名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知之甚少。 有人可以告訴我爲什麼我的演示在繪製一些行後運行得如此緩慢嗎? 非常感謝。
你的建議是非常有用的,但改變的drawLine()到一個新的線程後,它也需要太多的CPU resource.Confused。 –
攔截器是你的套接字連接..我相信你是從套接字讀取數據來畫線? –