3 回答

TA貢獻(xiàn)1772條經(jīng)驗(yàn) 獲得超6個(gè)贊
是的,您可以這樣做。
可以使用來(lái)訪問(wèn)類路徑上JAR文件中的非代碼資源Class.getResourceAsStream(String)
。應(yīng)用程序通常會(huì)這樣做,例如,將國(guó)際化消息作為資源包嵌入。
要將文件放入JAR文件,只需在運(yùn)行jar
命令之前將其復(fù)制到輸入目錄樹(shù)中的相應(yīng)位置即可。
跟進(jìn)
理論上,在某些情況下,您的應(yīng)用程序可以將文件存儲(chǔ)在其自己的JAR文件中:
JAR必須是本地文件系統(tǒng)中的文件。即不是從遠(yuǎn)程服務(wù)器獲取的JAR。
該應(yīng)用程序必須具有對(duì)JAR文件及其父目錄的寫(xiě)權(quán)限。
應(yīng)用程序不必在當(dāng)前的類加載器中回讀它寫(xiě)入JAR的文件。即不退出并重新啟動(dòng)。
JAR不必簽名。
該過(guò)程將是:
找到JAR文件,然后將其作為ZIP存檔閱讀器打開(kāi)。
創(chuàng)建一個(gè)ZIP歸檔編寫(xiě)器以編寫(xiě)新版本的JAR文件。
將應(yīng)用程序的文件寫(xiě)入編寫(xiě)器。
將所有從ZIP讀取器的資源寫(xiě)入寫(xiě)入器,但不包括舊版本的應(yīng)用程序文件。
關(guān)閉讀者和作家。
重命名新版本的JAR以替換舊版本。
如果初始JAR被JVM / OS鎖定,則最后一步可能不起作用。在這種情況下,您需要在包裝腳本中進(jìn)行重命名。
但是,我認(rèn)為大多數(shù)人都會(huì)同意這是一個(gè)糟糕的想法。僅編寫(xiě)常規(guī)文件更簡(jiǎn)單,更強(qiáng)大。

TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超13個(gè)贊
其他答案提供了一些不錯(cuò)的策略,但我建議您朝一個(gè)稍微不同的方向前進(jìn)。
該游戲據(jù)說(shuō)具有圖形,是桌面應(yīng)用程序。從Web服務(wù)器分發(fā)桌面應(yīng)用程序是最容易的。
如果您的游戲都符合上述兩個(gè)條件,則可以考慮使用Java Web Start進(jìn)行部署。
JWS提供了其他應(yīng)用程序不可用的API。&PersistenceService是對(duì)此問(wèn)題特別感興趣的一個(gè)。PersistenceService允許應(yīng)用程序存儲(chǔ)和還原少量數(shù)據(jù)。(即使它在沙盒中)。我做了一個(gè)小演示。的PersistenceService。
想法是檢查PersistenceService是否有應(yīng)用程序數(shù)據(jù),如果找不到,請(qǐng)使用Jars中的數(shù)據(jù)。如果用戶/應(yīng)用程序更改了數(shù)據(jù),則將更改后的數(shù)據(jù)寫(xiě)入PersistenceService。
JWS還提供了其他一些不錯(cuò)的功能,例如啟動(dòng)屏幕,桌面集成,自動(dòng)更新。
添加回答
舉報(bào)