내 애플릿을 호스트하는 JFrame이 있습니다. 애플릿에는 화살표 키와 엔터/이스케이프 키를 처리하는 KeyListener가 있습니다.수출 후 java 키리스트가 작동하지 않습니다.
Eclipse에서 JFrame을 실행하면 모든 것이 올바르게 작동하고 화살표 키가 입력 및 이스케이프 키와 함께 응답합니다.
그러나 프로젝트를 실행 가능한 Jar 파일로 내보낼 때 화살표 키는 계속 작동하지만 입력 및 이스케이프 키는 작동하지 않습니다. 이 문제를 어떻게 해결할 수 있습니까?
메인 클래스의 코드 : FinalSnake 애플릿에서
public static void main(String[] args) throws Exception {
new SnakeApp().snake();
}
public void snake() throws Exception {
// Set windows look
UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
// Create window
JFrame window = new JFrame("FinalSnake");
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// Add FinalSnake applet
FinalSnake finalSnake = new FinalSnake();
finalSnake.init();
finalSnake.start();
window.add(finalSnake);
// Set size
window.setResizable(false);
window.getContentPane().setPreferredSize(new Dimension(FinalSnake.GRIDSIZE * FinalSnake.GRIDX, FinalSnake.GRIDSIZE * FinalSnake.GRIDY));
window.pack();
// Set Icon
window.setIconImage(new ImageIcon(this.getClass().getResource("gfx/icon.png")).getImage());
// Center the frame
Dimension frameSize = Toolkit.getDefaultToolkit().getScreenSize();
window.setLocation((frameSize.width - window.getSize().width)/2, (frameSize.height - window.getSize().height)/2);
// Show the window
window.setVisible(true);
// And focus the FinalSnake applet
finalSnake.requestFocusInWindow();
}
코드 :
이@Override
public void keyPressed(KeyEvent e) {
if (this.world == null) {
if (e.getKeyCode() == KeyEvent.VK_UP || e.getKeyCode() == KeyEvent.VK_LEFT) {
this.gameType--;
if (this.gameType == 0) {
this.gameType = 2;
}
}
if (e.getKeyCode() == KeyEvent.VK_DOWN || e.getKeyCode() == KeyEvent.VK_RIGHT) {
this.gameType++;
if (this.gameType == 3) {
this.gameType = 1;
}
}
if (e.getKeyCode() == KeyEvent.VK_ENTER || e.getKeyCode() == KeyEvent.VK_SPACE) {
this.world = new World(this.gameType);
}
} else {
if (e.getKeyCode() == KeyEvent.VK_ESCAPE) {
this.world = null;
}
}
}
희망 누군가가 나를 위해이를 지울 수 있습니다 ... Thnx
왜 'FinalSnake'는'JPanel '이 아닌 애플릿입니까? 패널 인 경우 애플릿 또는 응용 프로그램에 추가 할 수 있으며 포커스 문제가 사라질 가능성이 큽니다. –