我正在通过NetBeans8.0使用Oracle JDK 1.8.0_05在Ubuntu 12.04 LTS 64位(使用Gnome Shell)上使用Java运行一些代码。

在Main或在其他情况下为空的Java项目中调用以下函数时,它们可以完美运行,但是,从任何JavaFX应用程序中调用时,它将导致窗口冻结并停止响应(尽管该项目符合要求),要求将其强制关闭。

谁能提出我所写内容的任何问题,可能引起问题或循环?

las,由于失败的模式,没有错误消息可供我提供或分析。

感谢您收到任何建议,在此先感谢。

   public static void desktopTest(){

            Desktop de = Desktop.getDesktop();

            try {
                de.browse(new URI("http://stackoverflow.com"));
            }
            catch (IOException | URISyntaxException e) {
                System.out.println(e);
            }

            try {
                de.open(new File("/home/aaa/file.ext"));
            }
            catch (IOException e){
                System.out.println(e);
            }
            try {
                de.mail(new URI("mailto:email@example.com"));
            }
            catch (URISyntaxException | IOException e){
                System.out.println(e);
            }
}

===============>>#1 票数:33 已采纳

我也有同样的问题,此解决方案对我有用:

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

===============>>#2 票数:3

我解决了...的问题

 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 票数:2

我也有同样的问题。 我发现,如果我从新线程中调用Desktop.open()方法,则我关闭JavaFX应用程序窗口后将打开该文件,但这无济于事。

如果你把

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

在调用launch(args)之后进入您的main方法,直到关闭JavaFX应用程序之后,它也不会被调用。

似乎JavaFX应用程序和Swing之间存在某种并发问题。

在Ubuntu上,您可以尝试

xdg-open filename

从您的JavaFX应用程序。

据我所知,您的代码应该可以工作。

===============>>#4 票数:1

JavaFX中提供了一种新的处理方式。 我看到的唯一缺点是您需要使用Application单例实例化HostServicesDelegate

HostServicesDelegate hostServices = HostServicesFactory.getInstance(appInstance);
hostServices.showDocument("http://www.google.com");

===============>>#5 票数:1

将其封装在系统线程上:

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

  ask by Wren translate from so

未解决问题?本站智能推荐:

1回复

OpenJDK不适用于javafx

我刚刚在笔记本电脑上安装了Fedora 21,并安装了OpenJDK8(JDK),Netbeans和SceneBuilder。当我创建一个新的JavaFX项目时,会出现以下消息: 我只有在管理平台下添加Oracle Java 8时才能修复它。 如何仅使用OpenJDK完成这些操作?
1回复

JavaFX 2.0如何获取GUI构建器? 哪个旧的JavaFX可用?

Linux的JavaFX 2.0 GUI构建器已删除? 就像在旧的JavaFX中一样,我们可以使用它。 但现在在最新的2.0我没有任何更多的GUI是正确的吗? 跟进:已安装的插件
1回复

无法在Linux上的Netbeans中创建JavaFX项目

所以我在这个问题上苦苦挣扎了一段时间。 我想在Netbeans中创建一个新的JavaFX项目,但是我没有选择从列表中选择JavaFX的选项。 由于我拥有最新的Java版本,因此JavaFX应该包含在SDK中,对吗? 我还查找了是否在目录/usr/local/jdk1.8.0_111/jre
1回复

使用netbeans时Ubuntu上的Javafx错误

当试图在ubuntu linux上运行一个基本的javafx应用程序时,我看到以下错误。 使用命令行或netbeans运行应用程序时出现错误。
1回复

有没有一种方法可以创建没有Netbeans,Eclipse或场景构建器的FXML / Javafx桌面应用程序?

我希望在不下载netbeans的情况下开始使用javafx和fxml(如官方文档所建议的那样: https ://docs.oracle.com/javafx/2/get_started/fxml_tutorial.htm),eclipse或scenebuilder。 我希望使用简单的文本编辑
3回复

我已经为Windows开发了一个Java桌面应用程序,我需要制作exe文件[重复]

这个问题已经在这里有了答案: 如何将Java程序转换为.exe文件? [已关闭] 13个答案 我已经为Windows开发了一个Java桌面应用程序,我需要制作exe文件,我不知道从我的项目中开发exe的过程
1回复

无法打开Scene Builder JavaFX

当我想打开Scene Builder时,它不会显示。 我尝试从NetBeans双击我的.fxml文件,双击可执行文件并直接从终端运行它。 我得到的错误: 我的Java版本: 我的NetBeans版本:8.0.2
5回复

如何在成功登录后停止Centos 7 Desktop返回登录屏幕?

所以我刚用台式机全新安装了Centos 7。 在安装之后,我安装了我的开发环境以及何时连接我的Windows ssd,但被告知需要关闭而不是休眠。 所以我重启了我的系统,启动进入windows,然后点击关机。 之后,我登录了我的Centos 7系统,在成功输入密码后,它将启动登录过程,然后
1回复

兄弟目录中的JavaFX开放资源

我试图结构化项目,以便在单个文件夹中没有应用程序的所有源代码,但是加载fxml文件时遇到问题。 我的项目结构 我似乎无法从MainMenuController.java类加载ChildMenu.fxml文件。 这就是我尝试过的 我也曾尝试搜索堆栈溢出和谷歌,但没有找到解决
3回复

如何在Netbeans中打开JavaFX项目?

如下所示在NetBeans IDE中设置JavaFX项目。 在文件菜单上,选择新建项目。 在“ JavaFX应用程序”类别中,选择“ JavaFX应用程序”。 点击下一步。 为什么看不到JavaFX应用程序类别? 我该如何解决? 我的Netbeans版本是7.1。