1

実行可能なjarを作成しながら、いくつかの画像を表示したり、いくつかのメディアファイルを再生したりするなど、リソースをどこに保持する必要があるか知りたかったのですか? 実行可能jarに含める必要がありますか、それとも実行可能jarの外に置く必要がありますか?

リソースを jar の外部に保持する場合、画像にアクセスするためにプログラムでどの URL ロケーション URL を渡す必要がありますか?

実際の問題は、jar ファイルの配布可能なコピーを作成したいということです。

画像とメディア ファイルにアクセスするためのローカル システムの場所を指定すると、それは私のシステムでは機能しますが、他のシステムに配布するとどうなりますか?

4

3 に答える 3

4

アプリケーションによって異なります。

リソースを jar にパックできます。通常、変更されないリソース (会社のロゴ、アイコンなど) に適していますgetClass().getResourceAsStream()

他の解決策は、サーバーからファイルをダウンロードすることです (HTTP 経由など)。このソリューションは、アプリケーションと一緒にパックしたくないメディアに適しています。たとえば、ユーザーに再生したいビデオ クリップです。または、おそらく前の例のローカライズされたアイコンまたは多言語アプリケーション用のローカライズされたメッセージです。

ダウンロードしているリソースはキャッシュできます。ユーザーの一時ディレクトリ ( System.getProperty("java.io.tmpdir")) を使用するか、場合によっては設定 APIを使用できます。

于 2012-09-09T14:03:51.600 に答える
3

これは根本的な答えではありませんが、本質的には、画像、プロパティなど (メディアも含む) のリソース プロジェクトを作成できます。

次に、リソース プロジェクト (以降、"MyProjectWsResources" と呼びます) をコード プロジェクト (以降、"MyProjectWsClient" と呼びます) の子として追加できます。MyProjectWsResources は MyProjectWsClient のビルド パスにあるため、リソースの参照が容易になります。プロジェクトのビルド パスに何かを入れることが何を意味するのかが不明な場合は、情報を参照するときに、MyProjectWsResources の src フォルダーにあるものはすべて MyProjectWsClient にあると言っています (絶対パスを使用していない限り:))

なぜ複数のプロジェクトのアプローチを取るのですか? IMO、コードをリソースから分離するため、リソースとコードを別々にダウンロードし、コードのみが更新された場合にクライアントがリソース プロジェクトを繰り返しダウンロードする必要はありません (コードの更新は、リソースの更新と比較してはるかに頻繁に行われると思います)。サーバーの帯域幅が少ない (Java WS やその他のパッケージング/システムを使用している場合は重要ですが、おそらくそうではないことがわかりました..それでも、これが役立つことを願っています:)

于 2012-09-09T14:05:17.803 に答える
2

jar ファイルの配布可能なコピーを作成したいと考えています。

最初に、あなたの質問のうち、質問ではなかった唯一の文について説明します。

ネット上のリンクをクリックするだけで Swing デスクトップ アプリケーションを複数のユーザーに配布する優れた方法は、 Java Web Startです。

JWS を使用したデプロイは、リソースを Jar に入れる必要があることを意味します。JWS の「自動更新」の性質で最良の結果を得るには、メディアの Jar(s) は次のようになります。

  • 別のサンドボックス化された拡張機能から参照されるため、他のアプリケーションと共有したり、個別に遅延して (必要に応じて) ロード/更新したりできます。
  • 圧縮:
    • 非圧縮、ビデオ、音声、および画像用
    • テキスト情報用に圧縮 (HTML、RTF、CSV など)
  • アプリケーションに認識されているパスを Jar に入れます。(例/resources/video/vidNNN.mp4)

Jarsであり、URL でアクセスする必要があります (またはInputStreamAlex が述べたように、URL はより堅牢です)。情報を引用します。ページ

URL urlToResource = this.getClass().getResource("/path/to/the.resource");

開発中は、一般に、エンド ユーザーがリソースを取得するのと同じ方法でリソースをアセンブルするビルド (アプリをビルドする) を調整するのが最善です。各実行。

それ以外の場合は、サーバー上のパブリックな場所にリソースを残しておき、必要に応じてそれらにアクセスしたい場合がありますが、これにより、アプリのメディア関連部分を実行するために実質的にサーバーが必要になります。リソースは静的 (ユーザーは変更しない) であり、「アプリケーション リソース」でもあるようです。

于 2012-09-09T23:36:28.807 に答える