2011-02-07 4 views
0
public class Resources 
{ 
    private static Resources myResource = new Resources(); 

    public static Image getImage(String name) 
    { 
    URL url = myResource.getClass().getResource(name); 
    //URL url = Resources.class.getResource(name); 
    return Toolkit.getDefaultToolkit().getImage(url); 
    } 
} 

나는 이미지 파일을 올리는 곳에서 리소스 클래스를 가지고있다. 내 주요 JPanel의에서자바 이미지가 리소스로 즉시 로딩되지 않음

(드로잉 보드) 난 내가

g2.drawImage(image, x, y, width, height, null); 

이 내 페인트 성분이

private Image image = Resources.getImage("image.png"); 

을 내가 먼저 상자 (사각형)을 만들 때 내 문제가되는에 이미지는 사용자가 손잡이처럼 움직일 수 있음을 알기 위해 이미지를 오른쪽으로 그려야합니다. 이미지가 바로 팝업되지 않지만, 내가 있어야 할 곳을 클릭하면 그 이미지가 나타납니다. 이 클래스 로딩과 관련이 있는지 궁금합니다.

* UPDATE SSCCE LMNOPQRSTUVWXYZ 무엇을 의미하는지이인가?

import java.awt.*; 
import java.awt.image.BufferedImage; 
import java.io.*; 
import java.net.*; 
import javax.imageio.ImageIO; 
import javax.swing.*; 


public class ShowImage { 
    static public void main(String args[]) throws Exception { 
    JFrame frame = new JFrame("Display image"); 
    JPanel panel = new testImage(); 
    frame.add(panel); 
    frame.setSize(500, 500); 
    //frame.pack(); 

    //JOptionPane.showMessageDialog(null, "Done setting size"); 
    frame.setVisible(true); 
    frame.setExtendedState(frame.getExtendedState() | JFrame.MAXIMIZED_BOTH); 

    } 
} 

class testImage extends JPanel { 

    Image image = Resources.getImage("pin.png"); 

    public void paintComponent(Graphics g) { 
    g.drawImage(image, 0, 0, 40, 40, null); 
    } 
} 

class Resources 
{ 
    private static Resources myResource = new Resources(); 

    // NOTE: there is no error checking here so if parameter is mistyped 
    // somewhere else in code, then this will probably throw a nullpointerexception 
    public static Image getImage(String name) 
    { 
    // TODO: Find out which way is better or preferred 
    URL url = myResource.getClass().getResource(name); 

    return Toolkit.getDefaultToolkit().getImage(url); 

    } 
} 
+0

문제가 코드의 다른 위치에있는 것으로 의심됩니다. 컨테이너를 다시 검증할지 여부와 관계없이 구성 요소를 추가하는 방법에 대해 ... 코드를 더 게시 할 수 있습니다. –

답변

1

이미지를 ImageIcon에 넣으십시오. JLabel에서. 이렇게하면로드가 처리됩니다.

이것이 원하는 것이 아니라면 MediaTracker를 찾아보십시오. 내가 어디를해야하는데 클릭하면 당신이하고있는 것처럼

+0

임의의 임의의 점. 1) Toolkit.getImage()는 이미지를 비동기 적으로로드합니다. 2) OP의 drawImage() 메소드 호출은 컴포넌트를 ImageObserver로 'null'대신 사용해야합니다. 3) 전체 이미지를 얻는 한 가지 다른 방법은 완료 될 때까지 차단하는 ImageIO.read() 메서드를 사용하는 것입니다. –

+0

나는 무엇을 이해하지 못한다. ..에 대한 약어가 있어야하나요? – daveyinaz

+0

f.e. = 예를 들면 – kohlehydrat

1

이미지는이

가 표시, 소리 즉시 팝업,하지만하지 않습니다

JLabel label = new JLabel(new ImageIcon(...)); 
frame.pack(); 
frame.setVisible(true); 
frame.add(label); 

기본을 코드는 다음과 같아야합니다.

JLabel label = new JLabel(new ImageIcon(...)); 
frame.add(label); 
frame.pack(); 
frame.setVisible(true); 

자세한 내용은 SSCCE을 참조하십시오. 그 문제를 보여줍니다.

관련 문제