2012-12-09 2 views
1

JFrame에 표시 할 jpeg를 얻으려고하고 있는데 일부 이미지 파일이 작동하지 않는 것을 느끼고 있습니다. 나는 이클립스를 사용하고 있으며 내 이미지는 모두 프로젝트의 루트 디렉토리에 있습니다. 디버거를 실행할 때 내 중단 점에 도달하면 표시되지 않는 이미지에 imageheight 및 imagewidth가 -1로보고됩니다. 그것은 표시하는 이미지에 올바른 값을보고합니다.ImageIcon 메서드가 모든 이미지에서 작동하지 않습니다.

처음에는 이미지 크기와 관련이 있다고 생각했지만 mspaint에서 해상도로 노는 후 이것이 사실이 아니라는 것을 깨달았습니다. 여기

내 코드는 지금까지 있습니다 :

import java.awt.*; 
import java.awt.image.*; 
import java.awt.event.*; 
import javax.swing.*; 
import javax.imageio.*; 
import java.io.File; 

public class icon { 

    public static void main(String[] args) { 
     constructVNCForm(); 
    } 

public static void constructVNCForm() { 
     //Vars for GUI and essential layout code 
     final JFrame frame = new JFrame("This should be on top"); 
     frame.setSize(800, 640); 
     Container content = frame.getContentPane(); 
     frame.setVisible(true); 

     //image code here: 
     ImageIcon image = new ImageIcon("trial4.jpg"); 
     //ABOVE WORKS 

     JLabel imageLabel = new JLabel(image); 
     FlowLayout flow = new FlowLayout(FlowLayout.CENTER); 
     //add the image to the frame 
     content.add(imageLabel); 

     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     content.setLayout(flow); 
    } 
} 

당신의 어떤 ImageIcons에 문제가 있었나요? 나의 jpegs 전부는 300x300의 밑에 각종 크기이다. 나는 Java에 익숙하지 않으므로 내 코드에 대한 제안 사항이 있으면 알려주십시오.

+0

'ImageIO'를 사용하여로드하려고하면 어떻게됩니까? 'ImageIcon'보다 더 유용한 피드백을 제공합니다. 이미지 공유 사이트에 문제가있는 이미지 중 하나를 업로드하고 바이트가 작은 경우 (<100Kb) 링크 할 수도 있습니다. –

+4

'constructVNCForm' BTW에 마지막 문으로'frame.setVisible (true)'를 넣어야합니다. – Reimeus

+0

@ Reimeus 답변이 정확합니다. – vels4j

답변

2

다양한 이미지 크기로 테스트 한 결과 다음과 같이 잘 작동합니다. 일반적으로 setVisible(true) 메서드를 호출해야합니다.

public static void main(String[] args) { 

     SwingUtilities.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       JFrame frame = new JFrame("This should be on top"); 
       frame.setSize(800, 640); 
       ImageIcon image = new ImageIcon("someImage.jpg"); 
       JLabel imageLabel = new JLabel(image); 
       FlowLayout flow = new FlowLayout(FlowLayout.CENTER); 
       frame.getContentPane().add(imageLabel); 
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       frame.setLayout(flow); 
       frame.pack(); 
       frame.setVisible(true); 
      } 
     }); 
    } 
관련 문제