我现在有两个类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()打印出来的东西夹杂在他们中间
    你debug一下在System.out.println("-----------------"); 和 Draw里分别设上断点就看见了,系统运行这短代码开启了2个线程
      

  2.   

    public static void main(String[] args) { 
            Algorithm pic=new Algorithm();    
            pic.Draw(); 
            Thread.sleep(1000*3);//然这个main线程睡觉去.呵呵
            System.out.println("-----------------"); 
    } UI是多线程的哦,要重绘还要处理消息,肯定要另外开个线程哦...
      

  3.   


    的确是两个进程,我循环了1000次,发觉是夹杂着打出来的
    然后我加了        try {
             Thread.sleep(1000); // wait 1000 ms for examination
             } catch (Exception ignore) {
            }
    就变成先画图,再打印横线了。谢谢