Я попытался с теми же версиями без проблем.
Если путь к geckodriver:
System.setProperty("webdriver.gecko.driver",
"/usr/local/bin/geckodriver");
правильный, убедитесь, что geckodriver является исполняемым для пользователя которые выполняют код:
chmod +x geckodriver
У меня также была та же проблема, и это решение работает для меня:
if( Desktop.isDesktopSupported() )
{
new Thread(() -> {
try {
Desktop.getDesktop().browse( new URI( "http://..." ) );
} catch (IOException | URISyntaxException e1) {
e1.printStackTrace();
}
}).start();
}
Я решил проблему с ...
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();
}
}
}
Существует новый способ справиться с этим в JavaFX. Единственный недостаток, который я вижу, - вам нужно создать экземпляр HostServicesDelegate
с помощью синглтона Application
.
HostServicesDelegate hostServices = HostServicesFactory.getInstance(appInstance);
hostServices.showDocument("http://www.google.com");
Инкапсулировать его в системный поток:
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());
У меня тоже такая же проблема. Я узнал, что если я вызову метод Desktop.open () из нового потока, файл откроется после Я закрою окно приложения JavaFX, но это мало помогает.
Если вы поместите
SwingUtilities.invokeLater(() -> System.out.println("Hello world"));
в свой основной метод после вызова запуска (args), он также не будет вызван до закрытия приложения JavaFX.
Кажется, что существует какая-то проблема параллелизма между приложением JavaFX и Swing.
На Ubuntu вы можете попробовать
xdg-open filename
из вашего приложения JavaFX.
Насколько я могу судить, ваш код должен работа.