3 回答

TA贡献1772条经验 获得超6个赞
是的,您可以这样做。
可以使用来访问类路径上JAR文件中的非代码资源Class.getResourceAsStream(String)
。应用程序通常会这样做,例如,将国际化消息作为资源包嵌入。
要将文件放入JAR文件,只需在运行jar
命令之前将其复制到输入目录树中的相应位置即可。
跟进
理论上,在某些情况下,您的应用程序可以将文件存储在其自己的JAR文件中:
JAR必须是本地文件系统中的文件。即不是从远程服务器获取的JAR。
该应用程序必须具有对JAR文件及其父目录的写权限。
应用程序不必在当前的类加载器中回读它写入JAR的文件。即不退出并重新启动。
JAR不必签名。
该过程将是:
找到JAR文件,然后将其作为ZIP存档阅读器打开。
创建一个ZIP归档编写器以编写新版本的JAR文件。
将应用程序的文件写入编写器。
将所有从ZIP读取器的资源写入写入器,但不包括旧版本的应用程序文件。
关闭读者和作家。
重命名新版本的JAR以替换旧版本。
如果初始JAR被JVM / OS锁定,则最后一步可能不起作用。在这种情况下,您需要在包装脚本中进行重命名。
但是,我认为大多数人都会同意这是一个糟糕的想法。仅编写常规文件更简单,更强大。

TA贡献1828条经验 获得超13个赞
其他答案提供了一些不错的策略,但我建议您朝一个稍微不同的方向前进。
该游戏据说具有图形,是桌面应用程序。从Web服务器分发桌面应用程序是最容易的。
如果您的游戏都符合上述两个条件,则可以考虑使用Java Web Start进行部署。
JWS提供了其他应用程序不可用的API。&PersistenceService是对此问题特别感兴趣的一个。PersistenceService允许应用程序存储和还原少量数据。(即使它在沙盒中)。我做了一个小演示。的PersistenceService。
想法是检查PersistenceService是否有应用程序数据,如果找不到,请使用Jars中的数据。如果用户/应用程序更改了数据,则将更改后的数据写入PersistenceService。
JWS还提供了其他一些不错的功能,例如启动屏幕,桌面集成,自动更新。
添加回答
举报