2016-07-28 4 views
1

IntelliJ를 사용하여 GUI 응용 프로그램에 대한 jar 파일을 만들었습니다. 그러나 파일을 실행할 때 다른 기능에 대해 ImageIcon 단추가 포함 된 toolbar을 볼 수 없습니다. stackoverflow (예 : Java Swing ImageIcon, where to put images?)를 둘러보고, 이미지의 파일 경로가 문제가 될 수 있음을 발견했습니다. currentPath 변수를 사용하여이 얻을 수IntelliJ를 사용하여 만든 실행 파일 Jar 파일에 도구 모음이 표시되지 않는 이유는 무엇입니까?

OpenImagingFileButton = new JButton(createImageIcon(currentPath.concat("/src/main/java/uni/images/open-file-icon-img.png"))); 

: 현재 나는 다음과 같은 코드를 사용하고

/** 
    * Returns an ImageIcon, or null if the path was invalid. 
    */ 
    protected static ImageIcon createImageIcon(String path) { 
     ImageIcon toolBarImage = new ImageIcon(path); 
     Image image = toolBarImage.getImage(); // transform it 
     Image newImg = image.getScaledInstance(20, 20, java.awt.Image.SCALE_SMOOTH); // scale it the smooth way 
     toolBarImage = new ImageIcon(newImg); // transform it back 
     return toolBarImage; 
    } 

이 코드가 작동 :

final String currentPath = currentRelativePath.toAbsolutePath().toString(); 

그리고 createImageIcon 방법을 다음과 같은 코드가 있습니다 완벽하게 intelliJ에서 실행하면 jar을 실행할 때 도구 모음이 보이지 않습니다. 또한 src 폴더 바로 아래에 이미지 폴더를 이동 한 후이 일을 시도 :

ImageIcon(this.getClass().getResource("/images/open-file-icon-img.png")); 

을하지만이 나에게 NullPointerException을 제공합니다. 내가 어디로 잘못 가고 있니?

+0

이것은 메이븐 프로젝트입니까? – Morfic

답변

1

여기에서는 현재 경로를 사용할 필요가 없습니다. 당신이 인 IntelliJ에서 작업하기 때문에, 단순히 자원 루트로, src 폴더를 선택하여 폴더를 표시하고 바로

이 이미지가 src 폴더에서 폴더 이동로가

마르크 디렉토리를 찾아 클릭. 그런 다음 버튼

Java - setting classpath

openProject = new JButton(); 
openProject.setIcon(createToolIcon("/images/openProject.png")); 

로 이미지 아이콘을 설정하고 같은 클래스 파일의 createToolIcon 방법을 배치하거나 별도의 클래스를 만들고 그 클래스를 사용하여 메소드를 호출하려면 다음 코드를 사용합니다.

public static ImageIcon createToolIcon(String path) { 
URL url = System.class.getResource(path); 
if(url == null) { 
    System.err.println("Unable to load Image: " + path);  
} 
ImageIcon icon = new ImageIcon(url);  
Image img = icon.getImage(); 
Image newimg = img.getScaledInstance(20, 20, java.awt.Image.SCALE_SMOOTH) 
ImageIcon newIcon = new ImageIcon(newimg);  
return newIcon;  
} 
+0

이 코드는 작동합니다! 또한 IntelliJ의 마크 디렉토리 기능에 대해 알지 못했습니다. 이제 모든 것이 올바른 위치에있는 것 같습니다. 엄청 고마워 :) – novicegeek