我想知道我应该在哪里保存我的资源,比如显示一些图像,播放一些媒体文件,同时制作可执行的 jar?我应该将它包含在可执行 jar 中还是应该保留在可执行 jar 之外?
如果我将资源保留在 jar 之外,我应该在程序中传递什么 URL 位置 URL 来访问图像?
实际上问题是我想制作我的 jar 文件的可分发副本。
如果我提供本地系统的位置以访问图像和媒体文件,它将在我的系统中工作,但是当我将它分发到其他系统时会怎样?
我想知道我应该在哪里保存我的资源,比如显示一些图像,播放一些媒体文件,同时制作可执行的 jar?我应该将它包含在可执行 jar 中还是应该保留在可执行 jar 之外?
如果我将资源保留在 jar 之外,我应该在程序中传递什么 URL 位置 URL 来访问图像?
实际上问题是我想制作我的 jar 文件的可分发副本。
如果我提供本地系统的位置以访问图像和媒体文件,它将在我的系统中工作,但是当我将它分发到其他系统时会怎样?
这取决于您的应用程序。
您可以将资源打包到 jar 中。通常,它适用于永远不会更改的资源:公司徽标、图标等。您可以使用getClass().getResourceAsStream()
.
其他解决方案是从服务器下载文件(例如通过 HTTP)。此解决方案适用于您不想与应用程序打包在一起的媒体。例如,您要播放给用户的视频剪辑。或者,可能是上一个示例中的本地化图标或多语言应用程序的本地化消息。
您正在下载的资源可以被缓存。您可以使用用户的临时目录 ( System.getProperty("java.io.tmpdir")
) 或有时使用首选项 API。
这不是一个激进的答案,但本质上,您可以为图像、属性等(甚至媒体)创建一个资源项目。
然后,您可以将您的资源项目(以下称为“MyProjectWsResources”)作为子项目添加到您的代码项目(以下称为“MyProjectWsClient”)。由于 MyProjectWsResources 位于 MyProjectWsClient 的构建路径中,因此可以更轻松地引用您的资源。如果您不清楚将某些内容放入项目的构建路径需要什么,那么当它引用信息时,MyProjectWsResources 的 src 文件夹中的任何内容都在 MyProjectWsClient 中(只要您不使用绝对路径:))
为什么要采用多个项目的方法?IMO,它将代码与资源分开,因此您可以单独下载资源和代码,并且当您的代码仅更新时,您的客户无需重复下载资源项目(我觉得代码更新比资源更新更频繁)。较小的服务器带宽(如果您使用 Java WS 或任何其他我现在意识到您可能不是的打包/系统很重要).. 仍然希望这会有所帮助:)
我想制作我的 jar 文件的可分发副本。
拳头,我将解决您问题中唯一不是问题的句子。
通过单击网络上的链接将 Swing 桌面应用程序分发给多个用户的一种好方法是 Java Web Start。
使用 JWS 部署意味着资源需要在 Jar 中。为了获得 JWS 的“自动更新”性质的最佳结果,媒体的 Jar 将是:
/resources/video/vidNNN.mp4
)Jars 中的资源是嵌入式资源,必须通过 URL 访问(或InputStream
如 Alex 所述,但 URL 更健壮)。引用信息。页。
URL urlToResource = this.getClass().getResource("/path/to/the.resource");
在开发过程中,通常最好安排一个构建,以最终用户获取资源的相同方式组装资源 - 构建应用程序。每次运行。
在其他情况下,您可能希望将资源留在服务器上的公共位置并根据需要访问它们,但这实际上使服务器成为运行应用程序的媒体相关部分所必需的。您的资源似乎既是静态的(用户不会更改它们)又是“应用程序资源”。