@@ -164,29 +164,41 @@ public File chooseFile(final File file, final String style) {
164
164
165
165
@ Override
166
166
public File [] chooseFiles (final File [] files , final FileFilter filter ) {
167
- final JFileChooser chooser = new JFileChooser ();
168
- chooser .setMultiSelectionEnabled (true );
169
- chooser .setSelectedFiles (files );
170
- if (filter != null ) {
171
- javax .swing .filechooser .FileFilter fileFilter = new javax .swing .filechooser .FileFilter () {
172
-
173
- @ Override
174
- public String getDescription () {
175
- return filter .toString ();
167
+ final File [][] result = new File [1 ][];
168
+ try {
169
+ // NB: We show the JFileChooser on the EDT because otherwise there could
170
+ // be a deadlock, particularly on macOS.
171
+ // See the {@link #chooseFile(File, String) chooseFile} method.
172
+ threadService .invoke (() -> {
173
+ final JFileChooser chooser = new JFileChooser ();
174
+ chooser .setMultiSelectionEnabled (true );
175
+ chooser .setSelectedFiles (files );
176
+ if (filter != null ) {
177
+ javax .swing .filechooser .FileFilter fileFilter = new javax .swing .filechooser .FileFilter () {
178
+
179
+ @ Override
180
+ public String getDescription () {
181
+ return filter .toString ();
182
+ }
183
+
184
+ @ Override
185
+ public boolean accept (File f ) {
186
+ if (filter .accept (f )) return true ;
187
+ return false ;
188
+ }
189
+ };
190
+ chooser .setFileFilter (fileFilter );
176
191
}
177
-
178
- @ Override
179
- public boolean accept (File f ) {
180
- if (filter .accept (f )) return true ;
181
- return false ;
192
+ int rval = chooser .showOpenDialog (appFrame );
193
+ if (rval == JFileChooser .APPROVE_OPTION ) {
194
+ result [0 ] = chooser .getSelectedFiles ();
182
195
}
183
- };
184
- chooser .setFileFilter (fileFilter );
196
+ });
185
197
}
186
- int rval = chooser . showOpenDialog ( appFrame );
187
- if ( rval != JFileChooser . APPROVE_OPTION )
188
- return null ;
189
- return chooser . getSelectedFiles () ;
198
+ catch ( final InvocationTargetException | InterruptedException exc ) {
199
+ log . error ( exc );
200
+ }
201
+ return result [ 0 ] ;
190
202
}
191
203
192
204
@ Override
0 commit comments