Все в программе выполняется в рамках одного основного потока или потока пользовательского интерфейса, с которым взаимодействует пользователь. Каждая программа ДОЛЖНА иметь хотя бы один поток. Этот основной поток имеет метод single main, в котором вы указываете задачи, которые хотите выполнить. Не имеет смысла иметь другой основной метод в том же потоке, поскольку у потока может быть только одна точка выполнения . Я думаю, вы также не понимаете, что представляют собой классы. Класс - это просто шаблон / шаблон, который описывает поведение / состояние, поддерживаемое объектом его типа. Например, класс для объекта «ТС» может содержать такие переменные, как «колеса», для определения количества колес у транспортного средства и «размер двигателя» и т. Д. c. Класс не инициирует отдельный поток, если вы явно не создадите новый поток внутри этого класса, который затем будет иметь собственный метод main или точку выполнения , другими словами. Это нужно только в том случае, если у вас есть тяжелые задачи, которые отнимают много времени (например, загрузка большого файла), поэтому вы хотите выполнить их в background , чтобы он не block ( лаг) интерфейс / основной поток. Тем не менее, для вашего случая использования это не нужно, поэтому я не буду углубляться.
Теперь, возвращаясь к своей программе, вы включили метод main в свой тестовый класс, что совершенно неверно. Итак, сначала вы удалите это, а затем все, что осталось - создать экземпляр вашего тестового класса в вашем основном классе, содержащем оригинальный метод main. Затем вы обрабатываете все логи c после нажатия кнопки внутри прослушивателя щелчков.
//Main methood I want to call
public static void main(String[] args) {
Display display = new Display();
JFrame frame = new JFrame();
frame.add(display);
frame.pack();
frame.setTitle("Space Invaders");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setResizable(false);
frame.setVisible(true);
display.start();
Test test = new Test(); //instantiate your button class here
}
После того, как вы добавили эту нижнюю строку в свой основной метод, теперь вы можете поместить свои логи c для нажмите кнопку внутри следующего метода.
b1.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
//insert your logic here...
}
});
РЕДАКТИРОВАТЬ: Пожалуйста, также убедитесь, что имя вашего класса начинается с заглавной буквы, чтобы следовать соглашению.