【发布时间】:2012-05-21 11:16:39
【问题描述】:
想知道JavaFX Image构造函数的相对路径解析算法是干什么用的:
- 独立应用。
- 浏览器部署的应用程序。
- Webstart 部署的应用程序。
如果算法可能会在多个位置查找,我想知道对于上述每个部署场景它们是什么。
如果将应用放入 jar 时,独立应用的行为会有所不同,我也想知道。
【问题讨论】:
想知道JavaFX Image构造函数的相对路径解析算法是干什么用的:
如果算法可能会在多个位置查找,我想知道对于上述每个部署场景它们是什么。
如果将应用放入 jar 时,独立应用的行为会有所不同,我也想知道。
【问题讨论】:
然后用户提供到new Image(String url) 的相对路径,它将相对于应用程序的工作目录又名System.getProperty("user.dir")
javaws myfxapp.jnlp) 运行的 web-start 应用程序,它的工作方式与独立应用程序相同所以大体方向是:对于独立应用程序,使用 url 与在 new File(String url) 中使用它的方式相同。对于 jnlp/plugin 使用带有协议的完整 url 或 Class.getResource() 方法。
更新:请注意,此行为将在 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。
【讨论】:
user.dir(或$PWD),但这种新行为“符合用户的期望”?无论如何,非常感谢您解决这个问题。不知道使用最新的 javafx 引入了一些重大更改。
getClass().getName().toString())所在的目录,将您的图像复制并粘贴到那里Image image=new Image(getClass().getResourceAsStream("yourImageName.jpg")); 是必须的。在 NetBeans 中,类所在的目录 NetBeansProjects/JavaFXProjectName/build/classes/packageName/
【讨论】:
如果您使用的是getClass().getResourceAsStream(),则答案是“/”,即您的 jar 文件的根目录(在其中)。不是 user.dir 也不是包的托管位置
【讨论】:
System.setProperty("user.dir", "c:"); root.getChildren().add(new ImageView(new Image("brd.jpg")));,你将有下一个异常:java.io.FileNotFoundException: c:\brd.jpg
getClass().getResourceAsStream() 的情况,以避免混淆读者。