Конспект
Я занимаюсь разработкой проекта Java Swing и успешно отлаживаю в IntelliJ IDEA, выполнив метод main напрямую.После закрытия фрейма отладчик завершает работу нормально.
Однако после добавления в проект диалогового окна JFileChooser
отладчик не завершается нормально.Мне приходится каждый раз нажимать кнопку остановки, что приводит к выходу JVM с ненулевым статусом.
Минимальный воспроизводимый пример
Это фрагмент кода, который вызываетпроблема;это ActionListener
, который я добавляю к двум кнопкам, запускающим JFileChooser
:
/**
* Generic action listener that is used for both file selection dialog buttons
*/
private final ActionListener fileSelectionButtonActionListener = new ActionListener()
{
@Override
public void actionPerformed(final ActionEvent event)
{
final String target = ((JButton) event.getSource()).getName();
assert (target.equals("file") || target.equals("directory"));
JFileChooser fileChooser = new JFileChooser(new File(".").getAbsoluteFile());
fileChooser.setDialogType(JFileChooser.OPEN_DIALOG);
if(target.equals("directory")) {
fileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
}
final int result = fileChooser.showOpenDialog(new JFrame());
if(result == JFileChooser.APPROVE_OPTION) {
File selectedFile = fileChooser.getSelectedFile();
if(target.equals("file")) {
fileTextField.setText(selectedFile.getAbsolutePath());
} else {
directoryTextField.setText(selectedFile.getAbsolutePath());
}
}
}
};
Шаги отладки
Я попытался переместить создание JFrame
из параметраметод showOpenDialog
к объявлению переменной и добавлен frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
, но это не решило проблему.Это похоже на то, что кадр все еще висит в памяти, и именно поэтому JVM не закрывается.
Вопрос
Как правильно закрыть JVM при использовании JFileChooser
?