19

我想知道 JavaFX Image 构造函数的相对路径解析算法是干什么用的:

  1. 独立应用程序。
  2. 浏览器部署的应用程序。
  3. Webstart 部署的应用程序。

如果该算法可能会在多个位置查找,我想知道它们对于上述每个部署场景是什么。

如果将应用程序放置在 jar 中时独立应用程序的行为不同,我也想知道这一点。

4

3 回答 3

14

然后用户提供它的相对路径new Image(String url)将相对于应用程序的工作目录又名System.getProperty("user.dir")

  1. 对于独立应用程序,它是您启动应用程序的文件夹
  2. 对于从命令行 ( javaws myfxapp.jnlp) 运行的 web-start 应用程序,它的工作方式与独立应用程序相同
  3. 对于从浏览器加载的插件启动或 webstart 应用程序,您无法可靠地确定工作目录的位置。它取决于浏览器,甚至取决于为该浏览器安装的插件。

所以总体方向是:对于独立应用程序,使用url与在new File(String url). 对于 jnlp/plugin 使用带有协议或Class.getResource()方法的完整 url。

更新:请注意,此行为将在 2.2 中得到澄清和更改。见http://javafx-jira.kenai.com/browse/RT-18291

以下评论来自 RT-18291,概述了 2.2 的预期更改:

Martin Sladecek 添加了评论 - 2012 年 5 月 15 日上午 10:53 在与 Richard Bair 讨论后,我们决定更改路径的当前(未记录)行为。目前,它们被视为 user.dir 相对。所有路径,无论是否带有前导斜杠,现在都将被解析为相对于类路径,这将与 CSS 一致,并且更符合用户的期望。对于 user.dir 相对路径,仍然可以使用“file:”URL。

于 2012-05-13T22:09:09.797 回答
2

如果您使用的是“/”,则答案是“/” getClass().getResourceAsStream(),即 jar 文件的根目录(在其中)。不是 user.dir 也不是托管包的位置

于 2012-05-14T15:04:26.997 回答
0
  1. getClass().getName().toString()搜索与您的 .java 文件相关的类文件(类的名称)所在的目录 ,将您的图像复制并粘贴到那里
  2. Image image=new Image(getClass().getResourceAsStream("yourImageName.jpg"));是必须的。

在 NetBeans 中,类所在的目录 NetBeansProjects/JavaFXProjectName/build/classes/packageName/

于 2015-06-10T12:33:29.740 回答