Java 为Swing桌面应用程序制作jar时,将资源放在何处?

Java 为Swing桌面应用程序制作jar时,将资源放在何处?,java,swing,embedded-resource,executable-jar,Java,Swing,Embedded Resource,Executable Jar,我想知道我应该把我的资源放在哪里,比如我正在显示一些图像,在制作可执行jar时播放一些媒体文件?我应该把它包含在可执行jar中还是应该把它放在可执行jar之外 如果我把资源放在jar之外,我应该在程序中传递什么URL来访问图像 实际上,问题是我想制作jar文件的可分发副本 如果我给出访问图像和媒体文件的本地系统的位置,它将在我的系统中工作,但在其他系统中分发时会发生什么情况?这取决于您的应用程序 您可以将资源打包到jar中。通常,它适用于从不更改的资源:公司徽标、图标等。您可以使用getClas

我想知道我应该把我的资源放在哪里,比如我正在显示一些图像,在制作可执行jar时播放一些媒体文件?我应该把它包含在可执行jar中还是应该把它放在可执行jar之外

如果我把资源放在jar之外,我应该在程序中传递什么URL来访问图像

实际上,问题是我想制作jar文件的可分发副本


如果我给出访问图像和媒体文件的本地系统的位置,它将在我的系统中工作,但在其他系统中分发时会发生什么情况?

这取决于您的应用程序

您可以将资源打包到jar中。通常,它适用于从不更改的资源:公司徽标、图标等。您可以使用
getClass().getResourceAsStream()
读取它们

另一种解决方案是从服务器下载文件(例如,通过HTTP)。此解决方案适用于不希望与应用程序打包在一起的介质。例如,要向用户播放的视频剪辑。或者,可能是上一个示例中的本地化图标或多语言应用程序的本地化消息


您正在下载的资源可以缓存。您可以使用用户的临时目录(
System.getProperty(“java.io.tmpdir”)
),或者有时使用。

它取决于您的应用程序

您可以将资源打包到jar中。通常,它适用于从不更改的资源:公司徽标、图标等。您可以使用
getClass().getResourceAsStream()
读取它们

另一种解决方案是从服务器下载文件(例如,通过HTTP)。此解决方案适用于不希望与应用程序打包在一起的介质。例如,要向用户播放的视频剪辑。或者,可能是上一个示例中的本地化图标或多语言应用程序的本地化消息


您正在下载的资源可以缓存。您可以使用用户的临时目录(
System.getProperty(“java.io.tmpdir”)
)或有时使用。

这不是一个激进的答案,但本质上,您可以为图像、属性等创建一个资源项目(甚至是媒体)

然后,您可以将资源项目(以下称为“MyProjectWsResources”)作为子项目添加到代码项目(以下称为“MyProjectWsClient”)。由于MyProjectWsResources位于MyProjectWsClient的构建路径中,因此可以更轻松地引用资源。如果您不清楚将某些内容放入项目的构建路径需要什么,那么在引用信息时(只要您不使用绝对路径:),它表示MyProjectWsResources的src文件夹中的任何内容都在MyProjectWsClient中)


为什么要采用多个项目的方法?在我看来,它将代码与资源分开,因此您可以分别下载资源和代码,并且当您的代码只更新时,您的客户不需要重复下载资源项目(我觉得代码更新比资源更新频繁得多)。较低的服务器带宽(如果您使用Java WS或我现在意识到您可能不使用的任何其他打包/系统,这一点很重要)。。尽管如此,希望这能有所帮助:)

这不是一个激进的答案,但本质上,您可以为图像、属性等创建一个资源项目(甚至是媒体)

然后,您可以将资源项目(以下称为“MyProjectWsResources”)作为子项目添加到代码项目(以下称为“MyProjectWsClient”)。由于MyProjectWsResources位于MyProjectWsClient的构建路径中,因此可以更轻松地引用资源。如果您不清楚将某些内容放入项目的构建路径需要什么,那么在引用信息时(只要您不使用绝对路径:),它表示MyProjectWsResources的src文件夹中的任何内容都在MyProjectWsClient中)

为什么要采用多个项目的方法?在我看来,它将代码与资源分开,因此您可以分别下载资源和代码,并且当您的代码只更新时,您的客户不需要重复下载资源项目(我觉得代码更新比资源更新频繁得多)。较低的服务器带宽(如果您使用Java WS或我现在意识到您可能不使用的任何其他打包/系统,这一点很重要)。。不过,希望这能有所帮助:)

我想制作jar文件的可分发副本

首先,我将回答你问题中唯一一句不是问题的话

通过点击网络上的链接,将Swing桌面应用程序分发给多个用户的一个好方法是

使用JWS部署意味着资源需要放在Jar中。为了获得JWS“自动更新”特性的最佳结果,媒体的Jar应为:

  • 从单独的沙盒扩展中引用,以便与其他应用程序共享,并单独、惰性地加载/更新(根据需要)
  • 压缩:
    • 未压缩,用于视频、声音和图像
    • 压缩文本信息(HTML、RTF、CSV..)
  • 在Jar中放入应用程序已知的路径。(例如
    /resources/video/vidNNN.mp4
JAR中的资源是一种资源,必须通过URL访问(或者Alex提到的
InputStream
,但URL更健壮)。引用

在开发过程中,通常最好安排一个构建,以最终用户获得资源的相同方式组装资源——构建应用程序。每次跑步

在其他情况下,您可能希望将资源保留在服务器上的公共位置,并根据需要访问它们,但这实际上使服务器成为运行应用程序的媒体相关部分所必需的。看起来您的资源既是静态的(用户不更改它们)又是“应用程序资源”

我想和妈妈谈谈
URL urlToResource = this.getClass().getResource("/path/to/the.resource");