我用的画图类时SWT里的GC,在一个应用程序中起了一个线程,当添加Transform时g.setTransform(transform)),,CPU运行马上占据》50%,整个程序显得很卡,不知原因为什么?如何解决?
完整测试程序如下:
import net.crescentdev.rcp.manager.SWTResourceManager;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.GC;
import org.eclipse.swt.graphics.Transform;
import org.eclipse.swt.widgets.Canvas;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
public class TransFormTest extends Shell implements Runnable{
private Canvas canvas;
private GC gc;
private Transform transform;
/**
* Launch the application
* @param args
*/
public static void main(String args[]) {
try {
Display display = Display.getDefault();
TransFormTest shell = new TransFormTest(display, SWT.SHELL_TRIM);
shell.open();
shell.layout();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* Create the shell
* @param display
* @param style
*/
public TransFormTest(Display display, int style) {
super(display, style);
createContents();
}
/**
* Create contents of the window
*/
protected void createContents() {
setText("SWT Application");
setSize(1000, 700);
canvas = new Canvas(this, SWT.DOUBLE_BUFFERED);
canvas.setBounds(0, 0, 1000, 700);
gc=new GC(canvas);
transform=new Transform(Display.getDefault());
Thread thread=new Thread(this);
thread.start();
//
}
public void run() {
while(true){
transform.translate(10, 10);
transform.rotate(1);
gc.setTransform(transform);
gc.drawImage(SWTResourceManager.getImage("E:/Eclipse/workspace/crescent/games/robocup/Characters/sprite.png"), 0, 0);
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
图片sprite.png如下:
SWTResourceManager文件如下:
http://www.roboticfan.com/blog/UploadFiles/2008-12/30184434544.rar