#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();