1/10 раз Java падает на JFileChooser.showOpenDialog - PullRequest
2 голосов
/ 17 декабря 2010

Невоспроизводимый сбой (без ошибок / исключений). Бывает, когда я запускаю диалог, чтобы выбрать папку только 1 из 10 раз. Код:

public String getFilePathFromDialog(String dialogTitle) {
    JFileChooser fileChooser;
    fileChooser = new JFileChooser();
    fileChooser.setDialogTitle(dialogTitle);
    fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
    fileChooser.setAcceptAllFileFilterUsed(true);
    if (fileChooser.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) {
        return fileChooser.getSelectedFile().toString();
    } else {
        return "";
    }
}

Это вылетает из моего приложения. После этого я могу только закрыть его: Ctrl + Alt + Delete -> Диспетчер задач -> Убить его -> Затем я получаю «Java (TM) Platform SE бинарный не отвечает» и я нажал кнопку Закрыть

Я что-то не так делаю или это ошибка?

Я нашел файл аварийного дампа, как Питер упоминал ниже. Вот некоторые из них:

#
# A fatal error has been detected by the Java Runtime Environment:
#
#  EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x62a5ff52, pid=5516, tid=5312
#
# Problematic frame:
# C  [nvd3dum.dll+0x2fff52]
#
Current thread (0x04323400):  JavaThread "AWT-Windows" daemon [_thread_in_native, id=5312, stack(0x04d60000,0x04db0000)]
siginfo: ExceptionCode=0xc0000005, writing address 0x04ee9004

Ответы [ 3 ]

2 голосов
/ 17 декабря 2010
# Problematic frame:
# C  [nvd3dum.dll+0x2fff52]

Это будет ваш видеодрайвер NVidia?

Обратите внимание, что это не поток AWT EDT, а внутренний системный поток. Вы можете попробовать отключить Direct Draw 3D (для этого есть некоторые системные свойства).

2 голосов
/ 17 декабря 2010

Я видел нечто подобное в Windows, когда JVM работала очень близко к максимальному объему памяти, выделенному для нее ОС.Затем пользователь открывает диалоговое окно, возможно, на сетевом диске, загружает некоторые дополнительные ресурсы ОС (возможно, библиотеки DLL), а затем JVM исчерпывает память (не кучу, а память, выделенную для самой JVM), а затем вылетает.

1 голос
/ 17 декабря 2010

Убедитесь, что код вызывается в EDT.

Кроме того, просто наблюдение (ничего общего с падением), лучше объявить переменную fileChooser и назначить ее в том же выражении (неизменность):

final JFileChooser fileChooser = new JFileChooser();
...