3

Eclipse の export to jar オプションを使用して、Java プロジェクトを実行可能な jar ファイルにしました。シリアル化されたファイルを使用しないことを除いて、jar は期待どおりに実行されます。GUIを見れば一目瞭然です。この問題の原因は何ですか?どうすれば修正できますか?

この関連する質問を見ました - JAR ファイルがシリアライゼーションを作成しないのはなぜですか?

しかし、この問題を回避する方法を正確に教えてくれるわけではありません。フォルダーをjarにパックできないようです。なんで ?コードが誤って/意図的にそのフォルダーにデータを追加し続け、jar 全体がハードディスクを占有する可能性があるためですか?

実行可能 jar とそのシリアライゼーション フォルダーをパックするある種の構造を作成するにはどうすればよいですか?

4

4 に答える 4

0

jarファイルを使用中/実行中は、jarファイル内に書き込むことはできません。jar ファイルをクラスパスに配置するか、jar からプログラムを直接実行すると、jar は jvm によってロックされるため、現在使用しているのと同じ jar ファイルを更新することはできません。


リソースをストリームとして使用するという人々からの解決策は、クラスがアーカイブ(使用している)ではなくフォルダーにある場合に機能します。


直接更新できないアーカイブとして、次の手順を実行する必要があります (自分で、またはサードパーティの API で)。
一時的な場所に抽出し 、ファイルを再アーカイブ し
て更新し ます安全でさえない 3 番目の操作を実行します。例として、jar ファイルを実行しているときに名前を変更してみてください。変更された場合、jar ファイルはまだ jvm によってロックされていません。jar ファイル内にあるクラスを呼び出すたびにロックされます。ファイル。 より適切で安全なシリアライゼーションとファイル保存については、これを調べてください: .



java.util.prefs.Preferences

于 2013-04-10T07:04:42.563 に答える
0

シリアル化されたファイルを読み取るために、JAR が Eclipse のコードと同じパスを使用する必要があります。

したがって、シリアル化されたオブジェクトを含むディレクトリを含むプロパティ ファイルを作成します。次に、これは JAR と私たちのプロジェクトの両方で同じです。

参照: http://www.mkyong.com/java/java-properties-file-examples/

于 2013-04-08T13:20:06.280 に答える
0

使用できます

AClass.class.getResource(String str);
//or
AClass.class.getResourceAsStream(String str);

AClass: クラスの 1 つ。

str: 読み取りたいファイルの場所。

例えば;

クラス階層が次のように見える場合:

+src
    +-com
         +-test
             |-AClass.java
             +-util
                 +-PrintUtil.java
             +-resources
                 |-Bouble.png
                 |-Mouse.png
                 +-Ocean.png

「Mouse.png」画像を読み取るには、さまざまな方法でこれを実行できます。

AClass.class.getResource("/resources/Mouse.png");
//or
PrintUtil.class.getResource("../resources/Mouse.png");
...
于 2013-04-08T14:36:49.423 に答える