Проблема с вызовом файла JAVA из файла JAVA

#java #multithreading #methods

Вопрос:

Я довольно новичок в java, и у меня возникли проблемы с вызовом игры в мини-теннис, которую я закодировал, следуя учебнику, в другой файл java. По сути, кнопка в Главном файле вызовет мою игру и отобразит ее в другом JFrame файле . Мне не удалось открыть свой игровой фрейм, и я знаю, что это как-то связано с компоновкой моего кода для игры, но я попытался перестроить его, и я не смог его вызвать, потому что основная функция выдает прерывистое исключение, потому что там есть поток, который продолжает зацикливаться в игре. Что бы я включил в свою основную программу, чтобы назвать ее, и как я могу изменить свою игру в мини-теннис, чтобы ее можно было назвать? В принципе, как я могу изменить приведенный ниже код, чтобы его можно было вызывать с помощью a Game2 game = new Game2(); в другой программе? Или есть другой метод?

 @SuppressWarnings("serial") public class Game2 extends JPanel {  Ball ball = new Ball(this);  Racquet racquet = new Racquet(this);  int speed = 1;   private int getScore() {  return speed - 1;  }   public Game2() {  addKeyListener(new KeyListener() {  @Override  public void keyTyped(KeyEvent e) {  }   @Override  public void keyReleased(KeyEvent e) {  racquet.keyReleased(e);  }   @Override  public void keyPressed(KeyEvent e) {  racquet.keyPressed(e);  }  });  setFocusable(true);  Sound.BACK.loop();  }   private void move() {  ball.move();  racquet.move();  }   @Override  public void paint(Graphics g) {  super.paint(g);  Graphics2D g2d = (Graphics2D) g;  g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,  RenderingHints.VALUE_ANTIALIAS_ON);  ball.paint(g2d);  racquet.paint(g2d);   g2d.setColor(Color.GREEN);  g2d.setFont(new Font("Verdana", Font.BOLD, 30));  g2d.drawString(String.valueOf(getScore()), 10, 30);  }   public void gameOver() {  Sound.BACK.stop();  Sound.GAMEOVER.play();  JOptionPane.showMessageDialog(this,  "You caught it this many times "   getScore(),  "Game Over",  JOptionPane.YES_NO_OPTION);  System.exit(ABORT);  }   public static void main(String[] args) throws InterruptedException {  JFrame frame = new JFrame("Catch the Snowball");  Game2 game = new Game2();  frame.add(game);  frame.setSize(300, 400);  frame.setVisible(true);  frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  while (true) {  game.move();  game.repaint();  Thread.sleep(10);  }  } }  

Комментарии:

1. Почему вы переходите this в Ball и Racquet ? Мне это кажется странным.

2. Вам нужно показать полную трассировку стека исключения.

3. Пожалуйста, объясните точно, что вы подразумеваете под «в другой программе». Покажите код, который вы используете.

Ответ №1:

Я не уверен, правильно ли я вас понимаю, но если вы хотите получить доступ Game2 game = new Game2(); из другого класса, вы можете создать статическую объектную игру.

 public class Game2 extends JPanel {  public static Game2 game;  ...  

Затем вам нужно его инициализировать.

 public static void main(String[] args) throws InterruptedException {  JFrame frame = new JFrame("Catch the Snowball");  game = new Game2();  

и тогда вы сможете получить к нему доступ с помощью

 Game2.game.something();