2017-09-22 7 views
0

FileChooser (ImageChooser가되는 JLabel과 결합 된) 및 JTextArea (JScrollPane 내부)를 포함하는 GUI Java 프로젝트를 작성 중입니다. 이 두 구성 요소는 모두 JPanel 내부에 있습니다.Java 응용 프로그램을 빌드 한 후 일부 GUI 구성 요소가 제대로 작동하지 않지만 IDE 테스트 중에는 문제가 없습니다. 왜?

UI when executed from IDE

을하지만 유물을 구축하고, 다음 이미지를 .jar 파일을 만드는 경우의 JLabel이 아닌 내부 : 나는 인 IntelliJ 아이디어의 내부에 그것을 실행 적

은 (버전 2017년 2월 4일) 모든 것이 잘 작동하는 경우 (최소 값이 200으로 설정되어 있지만) 초기화 JTextArea에의 크기 (높이)는 최소가된다 :

IU when executed from .jar file

내가 이미지 아이콘으로 인해 상대 경로 I로 초기화 될 수 없다고 생각/주요 자원 같은 상대 경로와

... 
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.

JTextArea의 크기는 JLabel에 이미지가있는 경우 정상이됩니다.

답변

1

맞습니다. 자원을 가져 오는 방법은 단지에서 문제가됩니다. 당신이 그들에 액세스해야

방법은 :

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

이 방법은 상대 경로를 지원합니다. src/main/resources 디렉토리가 IntelliJ IDEA의 'Resource Root'로 올바르게 표시되어 있는지 확인하십시오.

+0

정말 당신의 아카이브에'src'를 포함하면 안됩니다. 이것은 소스 코드를 포함 할 것입니다 - IntelliJ를 사용하지 않으므로 잘못 될 수 있습니다. 그러나 코드에서'src'를 절대 참조하면 안됩니다. – MadProgrammer

+0

@MadProgrammer That 's 권리. 아카이브에서 리소스가 포함되었는지 확인하면됩니다. IntelliJ IDEA는 아티팩트 설정을 지정할 때 기본적으로이 작업을 수행합니다. – Thibstars