unresponsive UI при открытии файла изображения с помощью связанной с ним программы в javafx filechooser [duplicate]

Я попытался с теми же версиями без проблем.

Если путь к geckodriver:

System.setProperty("webdriver.gecko.driver", 
    "/usr/local/bin/geckodriver"); 

правильный, убедитесь, что geckodriver является исполняемым для пользователя которые выполняют код:

chmod +x geckodriver
17
задан Wren 20 April 2014 в 00:10
поделиться

5 ответов

У меня также была та же проблема, и это решение работает для меня:

if( Desktop.isDesktopSupported() )
{
    new Thread(() -> {
           try {
               Desktop.getDesktop().browse( new URI( "http://..." ) );
           } catch (IOException | URISyntaxException e1) {
               e1.printStackTrace();
           }
       }).start();
}
24
ответ дан Alex K 27 August 2018 в 04:59
поделиться

Я решил проблему с ...

 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();
        }
    }

}
3
ответ дан Douglas 27 August 2018 в 04:59
поделиться

Существует новый способ справиться с этим в JavaFX. Единственный недостаток, который я вижу, - вам нужно создать экземпляр HostServicesDelegate с помощью синглтона Application.

HostServicesDelegate hostServices = HostServicesFactory.getInstance(appInstance);
hostServices.showDocument("http://www.google.com");
1
ответ дан Gabriel Féron 27 August 2018 в 04:59
поделиться

Инкапсулировать его в системный поток:

    final String url = "www.google.com";
    final Hyperlink hyperlink = new Hyperlink("Click me");
        hyperlink.setOnAction(event -> new Thread(() -> {
            try {
                Desktop.getDesktop().browse(new URI(url));
            } catch (IOException | URISyntaxException e1) {
                e1.printStackTrace();
            }
        }).start());
1
ответ дан Pascual Lorente Arencibia 27 August 2018 в 04:59
поделиться

У меня тоже такая же проблема. Я узнал, что если я вызову метод Desktop.open () из нового потока, файл откроется после Я закрою окно приложения JavaFX, но это мало помогает.

Если вы поместите

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

в свой основной метод после вызова запуска (args), он также не будет вызван до закрытия приложения JavaFX.

Кажется, что существует какая-то проблема параллелизма между приложением JavaFX и Swing.

На Ubuntu вы можете попробовать

xdg-open filename

из вашего приложения JavaFX.

Насколько я могу судить, ваш код должен работа.

2
ответ дан user3577819 27 August 2018 в 04:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: