Java Меню как вызвать основной метод из другого класса? - PullRequest
0 голосов
/ 18 января 2020

Я делаю игру для школьного проекта и пытаюсь вызвать метод main из другого пакета и класса, как я могу это сделать? У меня есть основной метод для моей игры:

//Main method 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();
}

И это мой код, который я создал для своего меню, и мой слушатель действия для кнопки, чтобы запустить и запустить метод main для класса

    //Menu/button I have created
public class test 
{
    public test ()
    {
        frame();
    }
    public void frame() 
    {
        JFrame f = new JFrame();
        f.setVisible(true);
        f.setSize(720,720);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JPanel p = new JPanel();
        JButton b1 = new JButton(" Action Listener");
        b1.addActionListener(new ActionListener() 
        {
            public void actionPerformed(ActionEvent e) 
            {

            }
        });
        p.add(b1);
        f.add(p);

    }

public static void main (String[]args) 
{
    new test();
}

1 Ответ

0 голосов
/ 18 января 2020

Все в программе выполняется в рамках одного основного потока или потока пользовательского интерфейса, с которым взаимодействует пользователь. Каждая программа ДОЛЖНА иметь хотя бы один поток. Этот основной поток имеет метод 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...
            }
        });

РЕДАКТИРОВАТЬ: Пожалуйста, также убедитесь, что имя вашего класса начинается с заглавной буквы, чтобы следовать соглашению.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...