我现在有两个类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()方法。百思不得其解

解决方案 »

  1.   

    JAVA里的图形用户界面是多线程的,你的mian方法是一个线程。当你调用Draw()方法时初始化ApplicationFrame,因为ApplicationFrame 继承了Frame,所以会开启一个新的线程,而main里的线程并没有停止,所以在另外一个线程正在开启的时候System.out.println("-----------------"); 
    就先执行了,你可以把System.out.println("-----------------"); 这句话循环100次,1000次的,你就会发现Draw()打印出来的东西加杂在他们中间
      

  2.   

    我对LZ的判断更是百思不得其解哦~
     pic.Draw(); 
            System.out.println("-----------------"); 这两个一个事cosole的输出信息 一个事界面上的draw出来的信息 你用什么判断先print的线在执行的draw方法???????也许draw已经画出来放在内存里了 页面显示不需要时间吗????? 肉眼看到的东西能作为真理吗?
    main方法本身就是起了一个线程 代码都是循序执行的 public static void main(String[] args) { 
            Algorithm pic=new Algorithm();    
            pic.Draw(); 
            Thread.currentThread().join();     System.out.println("-----------------"); 
        } 你加上我共色的那句代码 看看你的线还会打印出来吗?
    程序不是想当然的,frame本来不想模式地画框那种 会吧当前线程hold住  他和其他线程都是一样的 在pic.Draw的时候就起了一个界面线程 但不会影响线面代码的执行这个问题就相当你一边走一边扔石头 你确对别人说  明明是你先迈步走的 但是前面的人却先看到你扔过去的时候 他会问你 你为什么先扔石头后走路吗?
      

  3.   


    我在Drawer()方法里面有打印出一些内容,所以知道运行的先后顺序