2012-03-22 8 views
-3

이 질문에 대한 답변을 받기 전에 여기에서 같은 질문 4 개 또는 5 개를 읽었지만 아무도 도움을받지 못했습니다.이미지가 Java 애플릿에 표시되지 않음

저는 getdocumnetbase, getcodebase, 버퍼 된 이미지를 단지 이미지와 비교해 보았습니다. 그리고 지금까지 모든 것을 보았습니다. 내 상황을 돕는 것은 없습니다.

내 문제는 애플릿을 실행할 때 이미지가 표시되지 않는다는 것입니다. 애플릿에 단추가 추가되어 나타나는지 확인하지만 실제로 마우스를 가져 가거나 창 크기를 변경하지 않으면 사실은 그렇지 않습니다.

appelt가 지금하는 유일한 일은 이미지와 버튼을 보여 주지만 작동하지 않습니다. 그래서 나는 길을 잃었다.

public void init() { 

    JPanel panel = new JPanel() 
    { 
     public void paintComponent(Graphics g) 
     { 
      BufferedImage img = null; 
      try { 
       img = ImageIO.read(new File("..\\gifs\\Assembled.jpg")); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
      System.out.println("inside JPanel"); 
      g.drawImage(img, 0, 0, this); 

      super.paintComponent(g); 
     } 
    }; 

    JButton j = new JButton("hi"); 
    panel.add(j); 
    add(panel); 

addMouseListener(this); 
repaint(); 
} 

감사 :

여기에 코드입니다.

이제 투표를 통해 (도움을받지 못하면서) 누군가가 실제로 도움을 줄 수 있는지 알아볼 수 있습니다.

공공 무효의 init() {

JPanel panel = new JPanel(){ 

    public void paintComponent(Graphics g) 
    { 
     Image i = null; 
     try { 
      i = getImage(new URL(getCodeBase(), "../gifs/Assembled.jpg")); 
     } catch (MalformedURLException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     System.out.println("inside JPanel"); 
     g.drawImage(i, 0, 0, this); 

     //super.paintComponent(g); 
    } 
    }; 



    this.setLayout(new BorderLayout()); 
    panel.setSize(500,500); 
    add(panel, BorderLayout.CENTER); 
    addMouseListener(this); 
    //repaint(); 
} 

나는 코드를 편집하지만 여전히 아무것도 작동하지 않습니다. 이미지가 발견되어로드됩니다. 그러나 애플릿을 리사이즈하지 않으면 표시되지 않습니다. 다른 말로하면, 이미지는 크기가 재조정되는 동안 만 표시되며 다른 시간은 표시되지 않습니다. 이제 그게 뭘까? 아, 그리고 supper.paintComponent (g);에 대한 호출을 제거하면 전혀 표시되지 않습니다.

오, 당신의 링크가 내가 이것을 게시하기 전에 답변을 어떻게 시도했는지 보는 데 도움이되지 않았습니다.

+3

* "알고 있고 4 ~ 5 개의 동일한 질문을 읽었습니다"* 4 또는 5 중 어느 것입니까? 그리고 그것은 링크를 의미합니다. 나는이 질문에 지난 72 시간 동안 적어도 두 번 대답 했음에 틀림 없다. –

+1

가능한 [Applet image missing] (http://stackoverflow.com/questions/7256095/applet-image-missing) 및 [localhost의 이미지를 표시 할 수 없음] (http://stackoverflow.com/questions/5989606)/cant-display-images-localhost /) & [자바 애플릿에서 비트 맵 이미지를 어떻게 표시합니까?] (http://stackoverflow.com/questions/1045279/how-can-i-display-a- 비트 맵 - 자바 자바 애플릿 이미지) & .. –

+0

* "애플릿에 단추가 추가되어 표시되는지 확인하지만 실제로 마우스를 가리거나 창 크기를 변경하지 않으면 사실은 그렇지 않습니다. 맞아, 또 다른 문제. –

답변

2

웹 서버에서 애플릿을 제공합니다. 애플릿 코드를 다운로드하여 실행하는 웹 브라우저입니다. 따라서 애플릿은 웹 브라우저가 실행되는 곳과 물리적으로 동일한 기계에서 실행됩니다.

다음 줄

img = ImageIO.read(new File("..\\gifs\\Assembled.jpg")); 

는 파일이 웹 브라우저에 의해 실행되는 JVM의 작업 디렉토리를 기준으로 웹 브라우저가 실행되는 시스템의 로컬 디스크 파일 시스템에있을 것으로 예상하고있다. 이 아닌 경우은 웹 서버의 파일을 가리키며 애플릿의 JAR 파일에 패키지 된 파일 (있는 경우)을 가리 킵니다. 물론 최종 사용자가 로컬 디스크 파일 시스템에 이미 준비된 특정 이미지 파일을 가지고 있다고 기대할 수는 없습니다.

파일 이 실제로 인 위치에 따라 해당 부분을 변경해야합니다.

웹 서버에 애플릿이 실제로 다운로드 된 URL (해당 코드베이스)과 관련하여 실제로 URL에 파일을 가져와야하는 경우.

img = ImageIO.read(new URL(getCodeBase(), "gifs/Assembled.jpg")); 

애플릿이 http://example.com/contextname/applet.jar에 의해 제공되는 상상, 그 위의 예 http://example.com/contextname/gifs/Assembled.jpg으로 사용할 수있는 이미지를 가정합니다.

실제로 애플릿 JAR 파일에 패키지되어있는 경우 클래스 패스로 파일을 가져와야합니다.그런데

img = ImageIO.read(getClass().getResourceAsStream("/META-INF/gifs/Assembled.jpg")); 

가, JPG 파일은 GIF 파일이 아닌 다음과 같이 당신이 애플릿 JAR 파일의 /META-INF/gifs/Assembled.jpg에 저장 한 것을 상상해, 당신은 클래스 패스에 의해 그것을 얻을 필요가있다. "gifs"의 이름을 "images"또는 다른 이름으로 변경하는 것이 좋습니다.

관련 문제