Проблемы JOGL, com.jogamp.newt.event.KeyListener

Итак, мы имеем следующую структуру приложения:

введите здесь описание изображения

в конструкторе EC_GUI я инициализирую glViewer

    private void initGlViewer() {
        /**
         * Viewer.
         */
        glViewer = new GLViewer();
        glViewer.setup();
        centerPanel.add(glViewer.getNewtCanvasAWT());
    }

glViewer реализует GLEventListener и выглядит следующим образом:

    public GLViewer() {

        GLProfile gLProfile = GLProfile.getDefault();

        GLCapabilities gLCapabilities = new GLCapabilities(gLProfile);

        glWindow = GLWindow.create(gLCapabilities);
        /*
         *  We combine NEWT GLWindow inside existing AWT application (the main JFrame) 
         *  by encapsulating the glWindow inside a NewtCanvasAWT canvas.
         */
        newtCanvasAWT = new NewtCanvasAWT(glWindow);
    }

в glViewer.setup() я добавляю прослушиватели мыши, клавиши и glEvent в glWindow.

Я использую событие клавиши и мыши из com.jogamp.newt.event.

Мое событие keyPressed в моем keyListener начинается как:

@Override
    public synchronized void keyPressed(KeyEvent ke) {
        System.out.println("keyPressed " + ke.getKeyCode());

и keyReleased тоже.

Ну, иногда я испытываю несоответствия в отношении запуска. Возьмем в качестве примера, когда я нажимаю комбинацию ctrl+o, чтобы открыть FileChooser.

Это так и должно быть:

keyPressed 17
List of pressed inputs
ctrl
keyPressed 79
List of pressed inputs
ctrl
o
keyReleased 17
keyReleased 79
2014.10.09, 10:53:49  [INFORMATION]  Open a project ...
2014.10.09, 10:53:49  [INFORMATION]  Opening file chooser for load.
2014.10.09, 10:53:55  [INFORMATION]  User clicked 'cancel' in file chooser dialog.

Здесь вы можете видеть, что я нажимаю ctrl (17), затем o (17), они оба освобождаются, и отображается FileChooser. А потом я выхожу, как вы можете видеть в последней строке.

Но иногда я получаю следующее:

keyPressed 17
List of pressed inputs
ctrl
keyPressed 79
List of pressed inputs
ctrl
o
keyReleased 17
2014.10.09, 10:57:34  [INFORMATION]  Open a project ...
2014.10.09, 10:57:34  [INFORMATION]  Opening file chooser for load.
2014.10.09, 10:57:35  [INFORMATION]  User clicked 'cancel' in file chooser dialog.
keyPressed 17
List of pressed inputs
ctrl
keyReleased 79
2014.10.09, 10:57:36  [INFORMATION]  Open a project ...
2014.10.09, 10:57:36  [INFORMATION]  Opening file chooser for load.
2014.10.09, 10:57:38  [INFORMATION]  User clicked 'cancel' in file chooser dialog.

Я получаю Ctrl и o keyPressed, но я пропускаю один из keyReleased, o в данном случае. В любом случае, fileChooser все еще открывается. В следующей попытке я снова нажимаю ctrl+o, но на этот раз я пропускаю клавишу o. Я также пропускаю клавишу ctrlReleased. В любом случае, fileChooser все еще открывается. Но иногда не открывается, например:

keyPressed 17
List of pressed inputs
ctrl
keyPressed 79
List of pressed inputs
ctrl
o
keyReleased 17
2014.10.09, 11:08:57  [INFORMATION]  Open a project ...
2014.10.09, 11:08:57  [INFORMATION]  Opening file chooser for load.
2014.10.09, 11:08:58  [INFORMATION]  User clicked 'cancel' in file chooser dialog.
keyPressed 17
List of pressed inputs
ctrl
keyReleased 79
2014.10.09, 11:08:59  [INFORMATION]  Open a project ...
2014.10.09, 11:08:59  [INFORMATION]  Opening file chooser for load.
2014.10.09, 11:09:02  [INFORMATION]  User clicked 'cancel' in file chooser dialog.
keyReleased 79
keyReleased 17
keyReleased 79

Я получаю ctrl-keyPressed, o-keyPressed, ctrl-keyReleased, нет o-keyReleased, открывается fileChooser, затем я его закрываю. Нажимаю их снова, получаю ctrl-keyPressed, нет o-keyPressed, o-keyReleased, нет ctrl-keyReleased, открывается fileChooser, потом опять закрываю. Я снова нажимаю ctrl + o, я не получаю никакого нажатия клавиш, я просто получаю o-keyReleased, ctrl-keyReleased, а затем еще один o-keyReleased. FileChooser в этот раз не открывается..

Любая подсказка?


person elect    schedule 09.10.2014    source источник
comment
Вопрос уже задан здесь: forum.jogamp.org/keyReleased-keyPressed-problem-td4033288 .html Предоставьте модульный тест и заполните отчет об ошибке.   -  person gouessej    schedule 09.10.2014
comment
@gouessej уже сделал   -  person elect    schedule 09.10.2014
comment
jogamp.org/bugzilla/show_bug.cgi?id=1092   -  person gouessej    schedule 10.10.2014
comment
@gouessej точно :)   -  person elect    schedule 10.10.2014


Ответы (1)


Я решил, проверяя в каждом событии keyPressed/keyReleased нажатые модификаторы, запрашивая каждый модификатор X с помощью KeyEvent.isXDown()

person elect    schedule 27.10.2014