Java AWT Останавливает прослушивание ввода через случайные промежутки времени - PullRequest
0 голосов
/ 24 июня 2019

(Извините, я не могу получить рабочее Eg проблемы, мне нужна помощь для моей помощи!)

Я в процессе создания пользовательского игрового движка и столкнулся с проблемой, из-за которойпока игра запущена - игра перестает принимать данные

Я проверил, и программа продолжает работать в фоновом режиме.Кажется, он также не меняется на разных машинах (мое основное устройство - Mac Book Pro 2011)

import java.awt.event.*;
import java.io.IOException;
import java.awt.*;
import javax.swing.*;

public class Focus extends JFrame implements KeyListener {   
    private static final long serialVersionUID = 1L;
        char currKey = '\0';
        public static void main(String[] args) throws IOException {
            SwingUtilities.invokeLater(new Runnable() {public void run() {new UIManager();}});
        }
        public Focus() throws IOException {     
            Container contentPane = getContentPane();
            contentPane.add(new DrawCanvas());
            addKeyListener(this);
            setDefaultCloseOperation(EXIT_ON_CLOSE);
            pack();
            setFocusable(true);
            setVisible(true);
        }    
        private class DrawCanvas extends JPanel {                   
            private static final long serialVersionUID = 1L;   
            public void paintComponent(Graphics pen) {
                //Drawloop
                if(currKey == 'k') {
                    //This is the code that randomly stops running
                    System.out.println("Yo");
                }
                try {
                    Thread.sleep(10);
                }
                catch (InterruptedException e) {
                    e.printStackTrace();
                }
                repaint();
            }
        }
        @Override
        public void keyTyped(KeyEvent e) {
            currKey = e.getKeyChar();
        }
        @Override
        public void keyPressed(KeyEvent e) {
            currKey = '\0';
        }
        @Override
        public void keyReleased(KeyEvent e) {   
        }
}

Код выглядит мне правильно (но в то же время всегда так) и единственно возможное отключениеДело в том, что AWT установлен в Main, Run в UIManager, и код перемещения находится в проигрывателе, хотя я недостаточно знаю об AWT, чтобы знать, так ли это, и перемещение кода в резервной копии приводит к сбою программы.Любая помощь будет принята с благодарностью.

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