因此,我正在使用Greenfoot为Java的一个高中项目编写一个程序。在我的程序中,我使用JFileChooser让用户选择要编辑的图像,等等。
无论如何,当我第二次运行JFileChooser时,它似乎总是使我的JVM崩溃。它总是在我第一次启动程序时工作,但是如果我不重新启动JVM和程序,它会在我第二次使用它时冻结我的程序。
我不确定这是某种bug还是糟糕的编码实践(可能没有正确处理swing元素?)
本质上,这是我用来打开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。
任何帮助都很感谢--谢谢!
发布于 2015-09-13 04:55:54
Greenfoot在特定的线程(内部称为模拟线程)上运行您的代码。如果要使用Swing,则必须从Swing线程使用它。我相信你的代码已经死锁了,因为你在非Swing线程中使用了Swing类。您可以使用EventQueue.invokeLater在Swing线程之间来回切换(Greenfoot不支持这一点,但无论如何它都应该可以工作-- invokeLater比invokeAndWait更好)。
https://stackoverflow.com/questions/32534842
复制相似问题