2016-11-19 2 views
-1

Итак, я очень новичок в мире JSwing, не охваченный в моем классе AP Computer Science, который я закончил в прошлом году. Итак, я знаком с наследованием и всеми основными частями языка Java, но я не вижу разницы между двумя методами main() и run().В чем разница и эффективность между main() и run()?

Мой код здесь прекрасно работает на данный момент:

Main Class:

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

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

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

Run Класс:

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

 
}

Однако, я также видел этот метод запуска приложений JSwing:

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

Что такое большая разница между этими двумя? Какие проблемы я могу встретить в будущем, используя один из двух. Хотя есть много разных способов написания одной и той же программы, я хочу узнать об этом обычном способе.

Спасибо!

ответ

3

Вы спрашиваете, в чем разница между апельсином и буйволом - это две совершенно разные вещи.

  • Главный метод - это точка входа всех программ Java, даже тех, которые не имеют основных методов, таких как апплеты, где фактически есть основной метод, но он скрыт от представления.
  • Метод run, о котором вы говорите, является методом, который должен быть частью любого класса, реализующего интерфейс Runnable. Это не точка входа для запуска программ.
  • Ваш пример, приведенный выше, то есть для подачи Runnable в метод SwingUtilities.invokeLater(...), является способом гарантировать, что код в методе запуска Runnable вызывается в потоке событий Swing, что-то, что вы хотите сделать при запуске Swing (нет JSwing) для целей обеспечения безопасности потоков, так как если вы этого не сделаете, возникают риски ошибок (фактически исключений).
  • Качающиеся приложения по-прежнему нуждаются в основном методе, независимо от того, поставили ли вы их в очередь на поток событий Swing или нет. Это не «либо использовать главный, либо бегать», так как снова они совершенно разные животные.
  • Просто потому, что какой-то код «работает на данный момент» не гарантирует, что он будет работать позже. Режущие исключения известны как периодические и минимальные.
+0

Это намного больше смысла, спасибо. Я решил, что это создаст проблемы в будущем. –

Смежные вопросы