2017-09-22 12 views
0

私はFileChooser(JLabelとImageChooserを組み合わせたもの)とJTextArea(JScrollPaneの内部)を含むGUI Javaプロジェクトに取り組んでいます。これらのコンポーネントはどちらもJPanelの内部にあります。Javaアプリケーションをビルドした後、一部のGUIコンポーネントが正しく動作しませんが、IDEテスト中は問題ありません。どうして?

UI when executed from IDE

しかし、私はアーティファクトを構築し、.jarファイルを作成した場合、その後のJLabelの内部の画像がありません:私はIntelliJのアイデア(バージョン2017年2月4日)の内側にそれを実行した今までにすべてが正常に動作します

私は、イメージアイコンが原因の相対パスに初期化することができないと思われる

IU when executed from .jar file

:初期化され、大きさ(最小値が200に設定されているが)JTextAreaのの(高さ)が最小となります提供:

... 
imagePath = "src/main/resources/" + item.getImageName(); 
//item.getImageName() returns a proper image name, tested with 
//System.out.println() and there is a proper image in that folder. 
ImageIcon img = new ImageIcon(imagePath); 
img = ImageManager.resize(img); 
... 
//Resize function in ImageManager class 
public static ImageIcon resize(ImageIcon imageIcon, int size){ 
    return resize(imageIcon, size, size); 
} 

public static ImageIcon resize(ImageIcon icon){ 
    return resize(icon, defaultSize); 
} 

をしかし、私は、メイン/リソースのような相対パスとオプションを試してみました/と/メイン/リソース/、それらのどれもIDEとの.jar実行の両方で働いたしました。

パスに問題はありますか? はいの場合、JTextAreaのサイズにはどのような影響がありますか?

P.S.

JLabelに画像がある場合、JTextAreaのサイズは正常になります。

答えて

1

あなたが正しいです、リソースを取得する方法は、瓶で問題があります。

あなたがそれらにアクセスする必要があります方法:

ImageIcon img = new ImageIcon(this.getClass().getClassLoader().getResource(item.getImageName())); 

この方法では、相対パスをサポートしています。 src/main/resourcesディレクトリがIntelliJ IDEAの「リソースルート」として正しくマークされていることを確認してください。

+0

あなたのアーカイブに 'src'を含めてはいけません。これはあなたのソースコードを含んでいます - 私はIntelliJを使わないので間違いかもしれませんが、あなたのコードで' src'を決して参照してはなりません。 – MadProgrammer

+0

@MadProgrammer右。アーカイブでは、リソースが含まれていることを確認するだけです。それだけです。私はIntelliJ IDEAは、アーティファクト設定を設定するときにデフォルトでそれを行うと信じています。 – Thibstars

関連する問題