我现在有两个类ApplicationFrame和Algorithm, 我想要先运行Algorithm类里面的Draw()方法,然后再打印出一行线,可是每一次运行的时候总是先打印出线,然后再运行Draw()方法。百思不得其解
public class ApplicationFrame extends Frame {
public ApplicationFrame() { this("ApplicationFrame v1.0"); }
public ApplicationFrame(String title) {
super(title);
createUI();
}
protected void createUI() {
setSize(500, 700);
center();
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
dispose();
System.exit(0);
}
});
}
public void center() {
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
Dimension frameSize = getSize();
int x = (screenSize.width - frameSize.width) / 2;
int y = (screenSize.height - frameSize.height) / 2;
setLocation(x, y);
}
} public class Algorithm {
public void Draw(){
Frame f = new ApplicationFrame("DrawLine v1.0"){
public void paint(Graphics g) {
Graphics2D g2 = (Graphics2D)g;
for(int i = 0; i < 6; i++)
for(int j = 0; j < 6; j++){
if(v[i][j]==1){
Line2D line = new Line2D.Double(x[i],y[i],x[j],y[j]);
int k=i+1;
System.out.println("DX"+k+" "+x[i]);
g2.draw(line);
}
}
}
};
f.setSize(WIDTH, HEIGHT);
f.setVisible(true);
}
public static void main(String[] args) {
Algorithm pic=new Algorithm();
pic.Draw();
System.out.println("-----------------");
}
} 我想要先运行Algorithm类里面的Draw()方法,然后再打印出一行线,可是每一次运行的时候总是先打印出线,然后再运行Draw()方法。百思不得其解
public class ApplicationFrame extends Frame {
public ApplicationFrame() { this("ApplicationFrame v1.0"); }
public ApplicationFrame(String title) {
super(title);
createUI();
}
protected void createUI() {
setSize(500, 700);
center();
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
dispose();
System.exit(0);
}
});
}
public void center() {
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
Dimension frameSize = getSize();
int x = (screenSize.width - frameSize.width) / 2;
int y = (screenSize.height - frameSize.height) / 2;
setLocation(x, y);
}
} public class Algorithm {
public void Draw(){
Frame f = new ApplicationFrame("DrawLine v1.0"){
public void paint(Graphics g) {
Graphics2D g2 = (Graphics2D)g;
for(int i = 0; i < 6; i++)
for(int j = 0; j < 6; j++){
if(v[i][j]==1){
Line2D line = new Line2D.Double(x[i],y[i],x[j],y[j]);
int k=i+1;
System.out.println("DX"+k+" "+x[i]);
g2.draw(line);
}
}
}
};
f.setSize(WIDTH, HEIGHT);
f.setVisible(true);
}
public static void main(String[] args) {
Algorithm pic=new Algorithm();
pic.Draw();
System.out.println("-----------------");
}
} 我想要先运行Algorithm类里面的Draw()方法,然后再打印出一行线,可是每一次运行的时候总是先打印出线,然后再运行Draw()方法。百思不得其解
就先执行了,你可以把System.out.println("-----------------"); 这句话循环100次,1000次的,你就会发现Draw()打印出来的东西夹杂在他们中间
你debug一下在System.out.println("-----------------"); 和 Draw里分别设上断点就看见了,系统运行这短代码开启了2个线程
Algorithm pic=new Algorithm();
pic.Draw();
Thread.sleep(1000*3);//然这个main线程睡觉去.呵呵
System.out.println("-----------------");
} UI是多线程的哦,要重绘还要处理消息,肯定要另外开个线程哦...
的确是两个进程,我循环了1000次,发觉是夹杂着打出来的
然后我加了 try {
Thread.sleep(1000); // wait 1000 ms for examination
} catch (Exception ignore) {
}
就变成先画图,再打印横线了。谢谢