main()和run()之间的区别和效率是什么?

时间:2016-11-19 22:54:22

标签: java

所以我对JSwing世界很陌生,在我去年完成的AP计算机科学课程中没有多少内容。所以,我熟悉Java语言的继承和所有核心部分,但我看不出两个方法main()和run()之间的区别。

我的代码现在可以正常使用:

主要类别:

import java.awt.BorderLayout;
import java.awt.Component;

import javax.swing.JButton;
import javax.swing.JFrame;

public class Main {
	
	private JFrame frame;
	
	
	public Main() {
		
		frame = new JFrame("SoundCombine"); //Create frame
		
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //Close the frame when |x| button is pressed
		
		//Add components to the frame
		JButton button = new JButton();
		frame.getContentPane().add(button, BorderLayout.CENTER);
		
		frame.pack();
		
		frame.setVisible(true);
	}
	
}

运行类:

public class Run {
	
	public static void main(String args[]){
		
		new Main();
	
	}

}

但是,我也看到了启动JSwing应用程序的这种方法:

SwingUtilities.invokeLater(new Runnable() {
    public void run() {
        createAndShowGUI();
    }
});

两者之间有什么大的区别?使用两者中的任何一个,我将在未来遇到什么样的问题。虽然有很多不同的方法可以编写相同的程序,但我想知道传统方法。

谢谢!

1 个答案:

答案 0 :(得分:3)

你在问橙色和水牛之间的区别 - 这两个是完全不同的东西。

  • 主要方法是所有Java程序的入口点,即使是那些没有主要方法的程序,例如实际存在主要方法的applet,但它是隐藏的。
  • 您所说的run方法是一个需要成为实现Runnable接口的任何类的一部分的方法。这不是程序启动的切入点。
  • 上面的示例,即将Runnable提供给SwingUtilities.invokeLater(...)方法是一种保证Runnable的run方法中的代码在Swing事件线程上被调用的方法,这是你想要的为了线程安全起见,在启动Swing( JSwing)应用程序时要做的事情,因为如果你不这样做,就会有抛出错误(实际上是异常)的风险。
  • 无论您是否在Swing事件线程上对它们进行排队,Swing应用程序仍然需要一个main方法。它不是"使用main或run",再次,它们是完全不同的动物。
  • 仅仅因为某些代码"现在适用于"不能保证它会在以后工作。线程异常因间歇性发生和最不希望发生而臭名昭着。