0

私は Greenfoot を使って Java で高校のプロジェクト用のプログラムを書いています。私のプログラムでは、JFileChooser を使用して、ユーザーが画像を選択して編集できるようにします。

とにかく、JFileChooser を 2 回目に実行すると、常に JVM がクラッシュするようです。プログラムを最初に起動したときは常に機能しますが、JVM とプログラムを再起動しないと、2 回目に使用したときにプログラムがフリーズします。

これがある種のバグなのか、それとも不適切なコーディング慣行なのかはわかりません (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 を使用しています。

どんな助けでも大歓迎です-ありがとう!

4

1 に答える 1

0

Greenfoot は、特定のスレッド (内部的にシミュレーション スレッドと呼ばれます) でコードを実行します。Swing を使用する場合は、Swing スレッドから使​​用する必要があります。Swing スレッドから Swing クラスを使用しているため、コードがデッドロックしたと思います。EventQueue.invokeLater を使用して、Swing スレッドに切り替えたり戻したりできます (Greenfoot はこれをサポートするように設計されていませんが、とにかく動作するはずです。invokeLater は、invokeAndWait よりも優れた方法です)。

于 2015-09-12T20:55:53.913 に答える