【问题标题】:Packaging an Eclipse Program With External Files使用外部文件打包 Eclipse 程序
【发布时间】:2015-04-03 01:14:04
【问题描述】:

我不确定之前是否已回答过此问题,我尝试搜索我要问的问题,但找不到令人满意的问题。如果有人可以向我指出类似的问题,那会有所帮助。

我要做的是将具有外部文件(例如图像)的eclipse程序打包到单个文件中,而不是jar文件和放置在同一目录中的支持文件。

我不确定这是否可能,但在 eclipse 中是否有某种方法可以让您以某种方式将外部文件与 jar 文件一起打包到一个可以轻松执行的简洁文件中?


编辑:

多亏了 ortis 和 Thorbjørn Ravn Andersen,我才知道该怎么做。以下是解决问题的步骤:

  1. 首先,确保所有外部文件都在您的 src 文件夹中,而不是在您的 bin 或工作区或其他任何地方。如果您的项目中有包,它们将显示为文件夹,并且外部文件必须放在这些文件夹中才能在该包中使用。

  2. 至于调用外部文件,不要这样做:

    Image img = new Image("fileName");
    

    宁可这样做:

    Image img = new Image(getClass().getResourceAsStream("fileName"));
    

    同时确保“fileName”在 src 文件夹或包文件夹中,如果你有包的话。

几点:

-如果您使用主构造函数或函数调用之外的文件名初始化全局变量,getClass() 将不起作用。使用:

yourClassName.class.getResourceAsStream("fileName");

-如果您使用 JavaFX Scenebuilder 并且需要打包外部 CSS 文件,here 是一种解决方案,可帮助您在程序中加载样式表,而不是使用 .fxml 文件来完成。

-一个InputStream变量可以赋值为

的结果
getClass().getResourceAsStream("fileName"));

并被用来代替整个混乱。

【问题讨论】:

  • 您可以将所有资源(图像、声音等)打包到 Jar 中,并将整个程序作为单个 Jar 文件发布。但是要工作,您必须在代码中使用相对路径。检查Class.getRessourceAsStream
  • 只需将资源放入项目中(您可以创建一个专用文件夹将所有资源放入其中,或者将它们放入 java 包中,就像一个类一样)。要访问该文件,请尝试Class.getRessourceAsStream 上的任何教程,使用起来非常简单。
  • 你是导出为jar文件还是可运行的jar文件?
  • 两者都可以,但既然你说的是程序而不是 API,我想你希望能够运行它,所以 runnable Jar 应该更好
  • 尝试解压 Jar 并检查你的图片是否在其中。确保在你的项目中包含图片,就像一个普通的类文件(图片必须在你项目的“src”文件夹中的某个地方)

标签: java eclipse build package


【解决方案1】:

是的。您必须将所有外部文件引用为输入流(因为您希望类加载器从 jar 文件中获取它们),然后使用 http://launch4j.sourceforge.net/ 将生成的单个 jar 文件包装为 EXE 文件

【讨论】:

  • 假设我将所有文件都作为输入流引用,当我将项目导出为 jar 文件或可运行的 jar 文件时,我应该得到一个包含所有图像文件的文件吗?
  • 为什么引用 InputStream ?为什么需要 launch4j ?双击 jar 文件就可以了
  • 关于InputStream,可能是因为getClass().getResourceAsStream("filename");返回一个 InputStream 变量。如果您想传递 InputStream 对象而不是调用 getClass().getResourceAsStream("filename");每次……我都这么认为
  • @ortis 由于“而不是 jar 文件”的措辞。
猜你喜欢
  • 2016-08-11
  • 1970-01-01
  • 1970-01-01
  • 2011-07-19
  • 2017-02-25
  • 1970-01-01
  • 2011-02-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多