0

因此,我正在使用 Greenfoot 为 Java 中的一个高中项目编写程序。在我的程序中,我使用 JFileChooser 让用户选择图像进行编辑等。

无论如何,当我第二次运行 JFileChooser 时,它似乎总是让我的 JVM 崩溃。当我第一次启动程序时它总是有效,但如果我不重新启动 JVM 和程序,它会在我第二次使用它时冻结我的程序。

我不确定这是否是某种错误或糟糕的编码习惯(可能没有正确处理摆动元素?)

本质上,这是我用来打开 JFileChooser 的:

final JFileChooser fc = new JFileChooser();
JFrame frame = new JFrame();
fc.setFileFilter(new FileNameExtensionFilter("Images", "jpg", "png"));
int returnVal = fc.showOpenDialog(frame); //freezes here
if(returnVal == JFileChooser.APPROVE_OPTION) {
    //etc...

如果有什么不同,我使用的是带有 Java 1.7.0_71 的 mac

任何帮助表示赞赏 - 谢谢!

4

1 回答 1

0

Greenfoot 在特定线程(内部称为模拟线程)上运行您的代码。如果要使用 Swing,则必须从 Swing 线程中使用它。我相信您的代码由于使用了 Swing 线程之外的 Swing 类而陷入僵局。您可以使用 EventQueue.invokeLater 切换到 Swing 线程并返回(Greenfoot 并非旨在支持这一点,但无论如何它应该可以工作——invokeLater 是比 invokeAndWait 更好的选择)。

于 2015-09-12T20:55:53.913 回答