Таймер Swing не останавливает запуск событий при запуске в Java Web Start - PullRequest
1 голос
/ 09 августа 2011

У меня проблема с Java Web Start, который неправильно запускает мое приложение.Когда я запускаю код как приложение (т.е. без веб-запуска), следующий код приводит к остановке воспроизводимого звука и остановке анимации.

if (evt.getSource() == stopButton)
{   
    if (clipPlayer != null)
    {
        //Stop the sound from playing
        clipPlayer.stopPlaying();
    }
    for (int i = 0; i < rhythmWheel.NUM_WHEELS; i++)
    {
        rhythmWheel.getWheelPanels()[i].wheel.setRotationAngle(0);
    }
    //Stop the wheel from rotating.
    paintTimer.stop();
}

Однако, когда этот кодзапустить через веб-запуск, звук перестает играть, но анимация продолжается.Я полагаю, что это вызвано тем, что Timer продолжает запускать события, потому что удаление actionListener из Timer приводит к остановке анимации даже при запуске в Интернете.

Как заставить приложение заставить Timer прекратить запуск событийпри запуске в Java Web Start?

Ответы [ 2 ]

2 голосов
/ 10 августа 2011

Я хотел бы знать, почему эта ошибка появляется в программе при запуске под Java Web Start.

Убедитесь, что вы создаете графический интерфейс на поток рассылки событий .Это необходимо и для апплетов Swing. может изменить время настолько, чтобы выявить проблему.

2 голосов
/ 09 августа 2011

Я считаю, что в вашем коде есть необъяснимое исключение.

Прежде всего, научитесь вызывать файл JNLP вручную с помощью javaws, чтобы вы могли видеть, что выводится на консоль. Например. javaws foo.jnlp.

Если этого недостаточно, добавьте операторы печати (или операторы журнала, если вы используете протоколирование), чтобы вы могли ВИДЕТЬ, что окончательный оператор действительно достигнут.

Попробуйте

if (evt.getSource() == stopButton)
{   
    if (clipPlayer != null)
    {
        //Stop the sound from playing
        clipPlayer.stopPlaying();
    }
    System.out.println("after stopPlaying(). rhythmWheel.NUM_WHEELS=" + rhythmWheel.NUM_WHEELS);
    for (int i = 0; i < rhythmWheel.NUM_WHEELS; i++)
    {
        rhythmWheel.getWheelPanels()[i].wheel.setRotationAngle(0);
       System.out.println("set " + i + " to 0");
    }
    //Stop the wheel from rotating.
    paintTimer.stop();
    System.out.println("stop() called");
}

Если вы видите «stop () вызывается», таймер должен остановиться.

...