이미지 리소스로드 중
내 GUI에 오류가 있습니다. 제목 표시 줄 아이콘을 설정하려고하면 Runnable JAR에 포함됩니다.
BufferedImage image = null;
try {
image = ImageIO.read(getClass().getClassLoader().getResource("resources/icon.gif"));
}
catch (IOException e) {
e.printStackTrace();
}
frame.setIconImage(image);
내가 얻는 오류는 다음과 같습니다.
Exception in thread "main" java.lang.IllegalArgumentException: input == null!
at javax.imageio.ImageIO.read(Unknown Source)
at GUI.<init>(GUI.java:39)
at GUI.main(GUI.java:351)
이미지는 "resources"폴더가 프로젝트 파일의 루트 인 올바른 디렉토리에 있습니다.
먼저 다음 줄을 변경하십시오.
image = ImageIO.read(getClass().getClassLoader().getResource("resources/icon.gif"));
이에 :
image = ImageIO.read(getClass().getResource("/resources/icon.gif"));
두 접근 방식의 차이점에 대한 자세한 정보 는이 스레드에서 찾을 수 있습니다 . 리소스를로드하는 다른 방법
Eclipse의 경우 :
NetBeans의 경우 :
IntelliJ IDEA의 경우 :
- 프로젝트 의 src 폴더를 마우스 오른쪽 버튼으로 클릭 합니다 . 새로 만들기-> 패키지 선택
- 에서 새 패키지 대화 상자 , 패키지의 유형 이름을 말할 자원을 . 확인 클릭
- 리소스 패키지를 마우스 오른쪽 버튼으로 클릭합니다 . 새로 만들기-> 패키지 선택
- 에서 새 패키지 대화 상자 , 패키지의 유형 이름을 말할 이미지 . 확인 클릭
- 이제 프로젝트에 추가 할 이미지를 선택하고 복사하십시오. IDE 내에서 resources.images 패키지를 마우스 오른쪽 버튼으로 클릭 하고 붙여 넣기를 선택합니다.
마지막 링크를 사용하여 이제 Java 코드에서이 파일에 액세스하는 방법을 확인하십시오. 이 예에서는
getClass().getResource("/resources/images/myImage.imageExtension");
Shift+를 눌러 F10프로젝트를 만들고 실행합니다. 자원과 이미지 폴더는 내부에 자동으로 만들어집니다 아웃 폴더에 있습니다.
수동으로 수행하는 경우 :
- 프로젝트에 이미지를 추가하는 방법
- 아이콘 사용 방법
- 이 답변의 첫 번째 코드 예제에서 제공되는 약간의 추가 설명 .
빠른 참조 코드 예제 (자세한 내용을 고려하려면 약간의 추가 설명 링크) :
package swingtest;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.*;
/**
* Created with IntelliJ IDEA.
* User: Gagandeep Bali
* Date: 7/1/14
* Time: 9:44 AM
* To change this template use File | Settings | File Templates.
*/
public class ImageExample {
private MyPanel contentPane;
private void displayGUI() {
JFrame frame = new JFrame("Image Example");
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
contentPane = new MyPanel();
frame.setContentPane(contentPane);
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}
private class MyPanel extends JPanel {
private BufferedImage image;
public MyPanel() {
try {
image = ImageIO.read(MyPanel.class.getResource("/resources/images/planetbackground.jpg"));
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
@Override
public Dimension getPreferredSize() {
return image == null ? new Dimension(400, 300): new Dimension(image.getWidth(), image.getHeight());
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(image, 0, 0, this);
}
}
public static void main(String[] args) {
Runnable runnable = new Runnable() {
@Override
public void run() {
new ImageExample().displayGUI();
}
};
EventQueue.invokeLater(runnable);
}
}
거기에있어 훨씬 쉬운 방법 프레임 아이콘 같은 이미지는 부하가 및 설정 :
frame.setIconImage(
new ImageIcon(getClass().getResource("/resources/icon.gif")).getImage());
그리고 그게 전부입니다 :)! ImageIcon
선언 된 예외를 throw하지 않기 때문에 try-catch 블록을 사용할 필요조차 없습니다. 으로 인해 getClass().getResource()
응용 프로그램을 실행하는 방법에 따라 파일 시스템과 jar에서 모두 작동합니다.
If you need to check whether the image is available, you can check if the URL returned by getResource()
is null
:
URL url = getClass().getResource("/resources/icon.gif");
if (url == null)
System.out.println( "Could not find image!" );
else
frame.setIconImage(new ImageIcon(url).getImage());
The image files must be in the directory resources/
in your JAR, as shown in How to Use Icons and this example for the directory named images/
.
ReferenceURL : https://stackoverflow.com/questions/9864267/loading-image-resource
'programing' 카테고리의 다른 글
개발 브랜치에서 git pull origin master를 수행하면 어떻게 되나요? (0) | 2021.01.15 |
---|---|
Jodatime의 DateTime에 대해 날짜 시간대를 UTC로 기본 설정 (0) | 2021.01.15 |
libc의 디버그 버전을 사용하는 방법 (0) | 2021.01.15 |
EC2 인스턴스를 시작하고 각 인스턴스에서 시작 스크립트를 업로드 / 실행하는 방법은 무엇입니까? (0) | 2021.01.15 |
치명적 : 빨리 감기 불가능, 중단 (0) | 2021.01.15 |