所以我正在使用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感谢任何帮助 - 谢谢!
答案 0 :(得分:0)
Greenfoot在特定线程上运行代码(内部称为模拟线程)。如果要使用Swing,则必须在Swing线程中使用它。我相信你的代码已经陷入僵局,因为在Swing线程中使用了Swing类。您可以使用EventQueue.invokeLater切换到Swing线程并返回(Greenfoot不是为了支持这一点而设计的,但无论如何它应该可以工作 - invokeLater比invokeAndWait更好)。