2015-07-02 2 views
0

Немного смущен о публичном статическом основном методе void в Java и надеялся, что кто-то сможет помочь. У меня есть два классаПочему главный метод не запускается?

public class theGame { 
     public static void main(String[] args) { 
      lineTest gameBoard = new lineTest(); 
    } 

и

public class lineTest extends JPanel { 

    public void paintComponent(Graphics g) { 
     super.paintComponent(g); 
     Graphics2D g2d = (Graphics2D) g; 
     g2d.setColor(Color.red); 
     g2d.drawLine(100, 100, 100, 200); 
    } 

    public static void main(String[] args) { 
     lineTest points = new lineTest(); 
     JFrame frame = new JFrame("Points"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.add(points); 
     frame.setSize(250, 200); 
     frame.setLocationRelativeTo(null); 
     frame.setVisible(true); 
    } 
} 

Моя программа не рисует линию, к сожалению. Я пытаюсь понять, почему основной метод в классе lineTest не срабатывает?

Хотя я могу заставить его работать, изменив основной метод на что-то другое, например «go», а затем запустив этот метод из класса «theGame», я заинтригован, почему основной метод в классе lineTest не работает Не работай.

+0

Какой основной вы пытаетесь выполнить? Почему у вас есть два основных метода? – Garry

ответ

2

Ваше приложение имеет одну точку входа, и эта точка входа является единственным основным методом, который выполняется. Если вашей точкой входа является класс theGame, будет выполнен только основной метод этого класса (если только вы не вручную выполняете основные методы других классов).

Создание экземпляра класса lineTest не вызывает его основной метод.

0

Когда приложение Java выполняется, оно выполняется путем вызова основного метода в одном конкретном классе. Этот основной метод будет в зависимости от того, какой главный метод относится к классу, который был выбран для выполнения.

В вашем случае вы выбираете для выполнения основного метода класс theGame.

Когда другой класс построен в приложении, конструктор этого класса автоматически выполняется, но основной метод этого класса не выполняется автоматически.

1

Я начал сначала. Похоже, вы можете потратить некоторое время на то, чтобы следовать основному курсу java или курсу, чтобы получить базовые знания Java до скорости.

Что происходит в коде ниже, так это то, что класс theGame имеет основную запись для программы. JVM вызовет основной метод в начале вашей программы. Оттуда он выполнит инструкции, которые вы даете. Поэтому в большинстве случаев два основных метода не имеют смысла в одном проекте. Исключение из этого правила заключается в том, что вы хотите иметь две отдельные точки входа приложения в одну и ту же программу (например, приложение из командной строки и приложение GUI, которые используют одну и ту же логику, но управляются по-разному).

Таким образом, приведенный ниже код, вы должны указать класс TheGame как основную точку входа при запуске JVM для этого приложения.

public class TheGame { 
    private final LineTest theBoard; 
    public TheGame() { 
     theBoard = new LineTest(); 
    } 

    public void run() { 
     JFrame frame = new JFrame("Points"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.add(theBoard); 
     frame.setSize(250, 200); 
     frame.setLocationRelativeTo(null); 
     frame.setVisible(true); 
    } 

    /** 
    * Main entry for the program. Called by JRE. 
    */ 
    public static void main(String[] args) { 
     TheGame instance = new TheGame(); 
     instance.run(); 
    }  
} 

и

public class LineTest extends JPanel { 

public void paintComponent(Graphics g) { 
     super.paintComponent(g); 
     Graphics2D g2d = (Graphics2D) g; 
     g2d.setColor(Color.red); 
     g2d.drawLine(100, 100, 100, 200); 
    } 
} 
Смежные вопросы