JavaFX Freeze on Desktop.open(file), Desktop.browse(uri) JavaFX Freeze on Desktop.open(file), Desktop.browse(uri) linux linux

JavaFX Freeze on Desktop.open(file), Desktop.browse(uri)


I also had the same problem and this solution works for me:

if( Desktop.isDesktopSupported() ){    new Thread(() -> {           try {               Desktop.getDesktop().browse( new URI( "http://..." ) );           } catch (IOException | URISyntaxException e1) {               e1.printStackTrace();           }       }).start();}


I resolved problem with...

 public static void abrirArquivo(File arquivo) {    if (arquivo != null) {        if (arquivo.exists()) {            OpenFile openFile = new OpenFile(arquivo);            Thread threadOpenFile = new Thread(openFile);            threadOpenFile.start();        }    }}private static class OpenFile implements Runnable {    private File arquivo;    public OpenFile(File arquivo) {        this.arquivo = arquivo;    }    private void abrirArquivo(File arquivo) throws IOException {        if (arquivo != null) {            java.awt.Desktop.getDesktop().open(arquivo);        }    }    @Override    public void run() {        // TODO Auto-generated method stub        try {            abrirArquivo(arquivo);        } catch (IOException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }    }}


I also have this same problem. I found out that if I call the Desktop.open() method from a new thread, the file will open after I close the JavaFX application window, but that doesn't help much.

If you put

SwingUtilities.invokeLater(() -> System.out.println("Hello world"));

in to your main method after your launch(args) call, it also won't get called until after you close the JavaFX application.

It seems like there's some kind of concurrency issue between the JavaFX application and Swing.

On Ubuntu you can try

xdg-open filename

from your JavaFX app.

As far as I can tell, your code should work.