Deployment JavaFX FXML 2.2-使用位图部署应用程序

Deployment JavaFX FXML 2.2-使用位图部署应用程序,deployment,javafx,javafx-2,Deployment,Javafx,Javafx 2,我已经搜索了很多,并尝试了几种方法来做到这一点,但我被难倒了。我正在编写一个桌面应用程序(虽然我想它也可以在浏览器中运行),它允许Android程序员一次编辑所有的dimens.xml文件。我创建了自己的图像,在ImageView中用作按钮。我使用不同的方法访问这些图像: 有些在FXML文件中引用,如。路径是“src/Icons/”。FXML文件的路径是“src/application/xxx,FXML” css文件中引用了一些,如“-fx image:url(“QuestionMark.png

我已经搜索了很多,并尝试了几种方法来做到这一点,但我被难倒了。我正在编写一个桌面应用程序(虽然我想它也可以在浏览器中运行),它允许Android程序员一次编辑所有的dimens.xml文件。我创建了自己的图像,在ImageView中用作按钮。我使用不同的方法访问这些图像:

  • 有些在FXML文件中引用,如
    。路径是“
    src/Icons/
    ”。FXML文件的路径是“
    src/application/xxx,FXML

  • css文件中引用了一些,如“
    -fx image:url(“QuestionMark.png”);
    ”。css文件和png文件位于同一目录“
    src/MessageBox/

  • 有些在运行时会动态更改:

    ImageView mButtonIcon = new ImageView("/insert_item_above.png");
    
    The path of the image: src/
    The path of the class: src/ContextMenuButton/
    
  • 以上仅适用于Netbeans 7.4。当我在Eclipse中运行应用程序时,没有一个可以工作

    如果我转到dist/目录并从3种方法中的任何一种运行它,我会看到我的图像

    如果我将dist/文件夹移动到其他地方,唯一能让它工作的方法就是将src/文件夹复制到同一个目录,并删除除png和css文件以外的所有文件。因此,我最终得出以下结论:

    + F:/AndroidDimens
        + dist
            xxx.jar
        + src
            insert_item_above.png
            + Icons
                 ic_launcher.png
            + MessageBox
                 QuestionMark.png
    
    因此,jar文件修改了所有路径,使之与src/文件夹相对。我的目标是创建与jar文件所在位置相关的路径。我尝试将图像放置在不需要项目相关路径的位置。但它必须在jar中(相对于项目的dist/文件夹)创建类似“
    。/src/MessageBox/QuestionMark.png
    ”的路径

    有办法解决这个问题吗?理想情况下,我希望所有图像都在一个目录中。然后我就可以压缩这个目录,其他人就可以解压缩并运行这个应用程序

    谢谢

    编辑 多亏了@jewelsea(在聊天中),我发现问题是由于安装了JDK 7u13的旧版本以及JavaFX2.2所需的最新版本。删除旧版本,并更新引用它的全局变量,解决了这个问题。无需更改默认项目设置。

    打包建议

    使用将应用程序的所有运行时类文件和资源(fxml、css、png等)打包到应用程序jar文件中

    NetBeans 7.4在JavaFX应用程序项目的构建过程中自动使用JavaFX打包工具

    Eclipse和其他构建环境不会自动使用JavaFX打包工具。我相信,如果您使用推荐的Eclipse,那么该工具集将通过其UI为您提供使用JavaFX打包工具打包应用程序的能力

    JavaFX有第三方打包替代方案,如或,也可以正确打包您的应用程序

    无论您选择什么打包工具,都可以通过从结果jar中解压缩文件并检查所有资源文件(fxml、css、png、properties等)是否都在jar的内部目录结构中来测试打包过程。这个解压过程只是一个开发人员健全性检查,您不需要要求最终用户执行这样的解压

    您的最终用户可以将您的应用程序作为已安装的本机应用程序(JavaFX术语)或点击执行jar文件(JavaFX术语)运行,并且您的应用程序的所有资源将自动从打包的应用程序中获得,而无需用户进行额外的工作

    资源访问建议

    我建议不要在代码中引用src路径(因为在分发jar中没有src路径)、css或fxml文件,而是引用那些相对于分发jar根目录或JavaFX应用程序类的路径。例如,要在JavaFX应用程序子类中加载场景样式表,请使用


    谢谢我曾试图阅读有关部署JavaFX应用程序的Oracle文档,对我来说完全是希腊语。他们谈论你所做的事情,但从不展示你将如何/在哪里做。我查看了nbproject文件夹中的各种XML文件,看不出它是否在这些文件中,我必须输入一些内容。如果内置了打包工具,这不是很容易吗?谢谢。在你的问题中,你说它在NetBeans中工作,那么问题是什么呢?当我在NetBeans中运行项目时,它工作。问题是我必须做什么才能让它在IDE之外运行。另外,出于什么原因,我用来让它在Netbeans中运行的URL在Eclipse中不起作用。我更喜欢Eclipse,但Netbeans应该能够使部署更容易。因此,我提出了一个问题。我们可以在第二天讨论这个问题。
    scene.getStylesheets().
        add(this.getClass().getResource("my.css").toExternalForm());