0

シリアルポート通信用のJavaアプリを作成していますが、アプリのフォルダー内に、実行時に存在する必要のある2つのリソースがあります。1つはスプラッシュ画面として使用されているイメージで、もう1つはプログラムの起動時に読み取る必要のある構成ファイルです。

Linuxの「tree」コマンドからの出力の要約版を次に示します。参照する必要がある2つのファイルは、「commandSet.config」と「splash-screen2.png」です。

.
├── bin
│   ├──...
├── commandSet.config
├── app-manifest.txt
├── splash-screen2.png
└── src
    ├── events
    │   └── InterfaceEvents.java
    ├── models
    │   ├── Command.java
    │   └── Phone.java
    ├── operations
    │   ├── Application.java
    │   ├── ...
    └── views
        ├── CallDialog.java
        ├── SplashScreen.java
        └── Window.java

私は現在、次の行で参照しています。

BufferedReader in = new BufferedReader(new FileReader("commandSet.config"));

JLabel image = new JLabel(new ImageIcon("splash-screen2.png"));

これは、Eclipseから実行している場合は正常に機能しますが、実行可能なJARにエクスポートするとすぐにファイルが移動されないため、正しく参照されません。それらを「src」フォルダーに移動しようとしましたが、その結果、JAR内にアーカイブされましたが、それでも参照できませんでした。

私はJavaプロジェクトをエクスポートするという概念にかなり慣れていないので、何か明らかなことを見逃しているかもしれません。誰かがこれを行うための最良の方法と将来のプロジェクトファイルシステムのための最良のアプローチを私に教えてくれれば、私は非常に感謝するでしょう。乾杯!

4

3 に答える 3

3
 InputStream in = this.getClass().getClassLoader().getResourceAsStream("splash-screen2.png");  
byte[] buffer = new byte[in.available()];
in.read(buffer);  
ImageIcon icon = new ImageIcon(buffer);
于 2012-07-16T12:09:57.667 に答える
1

ファイルシステムにある場合と同じ方法でそのファイルにアクセスすることはできません。

コンテキストから使用getResourceAsStream()して、クラスローダーを使用してCLASSPATHから読み取ります。

于 2012-07-16T12:04:57.647 に答える
0

わかりました、私はこれをクラックするように管理し、将来他の人のために答えを落とすと思いました。私は基本的に「duffymo」のガイドラインに従いました。これが私がしたことです。

  • のリソースを使用してJARを作成しました。
  • そのJARをプロジェクトのルートに配置します。
  • Eclipseを使用して、そのJARをビルドパスに追加しました。
  • getResourceAsStream( " /nameOfFile.ext ")を使用して、リソースのストリームを取得しました。

乾杯!

于 2012-07-17T09:49:05.337 に答える