2013-04-05 2 views
0

게임을 만들고 이미지를 Map에 저장하고 그 안에 TreeMap가 있습니다. getImage 메서드를 사용하여지도를 확인하고 이미지의 특정 키가 저장되어 있는지 확인하려고합니다. 그렇다면 리소스 패키지에서 이미지를로드하지 않고 맵에 키를 저장하면 다음 번에 getImage 메서드가 호출되므로 키가 이미 맵에 있으므로 이미지를 일찍로드하므로 이미지를 일찍로드하십시오.지도에 넣은 값을 저장하지 않습니다.

문제는지도가 키를 입력 한 후에 저장하지 않는다는 것입니다. 특히 맵에 이미지 키를 참조 할 때 Image Loaded.의 콘솔 출력을 수신해야하므로 동일한 이미지를 호출하고 있습니다. 다음은 저장하지 않는 것을 보여주기 위해 설정 한 테스트의 콘솔 출력이있는 클래스입니다.

{} 
    Not loaded. 
    {resources/[email protected]: type = 5 ColorModel: #pixelBits = 24   numComponents = 3 color space = [email protected] transparency = 1 has alpha = false isAlphaPre = false ByteInterleavedRaster: width = 600 height = 600 #numDataElements 3 dataOff[0] = 2} 
    {} 
    Not loaded. 
    {resources/[email protected]: type = 5 ColorModel: #pixelBits = 24   numComponents = 3 color space = [email protected] transparency = 1 has alpha = false isAlphaPre = false ByteInterleavedRaster: width = 600 height = 600 #numDataElements 3 dataOff[0] = 2} 
    {} 
    Not loaded. 
    {resources/[email protected]: type = 5 ColorModel: #pixelBits = 24   numComponents = 3 color space = [email protected] transparency = 1 has alpha = false isAlphaPre = false ByteInterleavedRaster: width = 600 height = 600 #numDataElements 3 dataOff[0] = 2} 
    {} 
    Not loaded. 
    {resources/[email protected]: type = 6 ColorModel: #pixelBits = 32   numComponents = 4 color space = [email protected] transparency = 3 has alpha = true isAlphaPre = false ByteInterleavedRaster: width = 45 height = 45 #numDataElements 4 dataOff[0] = 3} 

나는 그것이 값을 저장하고 올바르게지도를 참조 할 수 있습니다 방법이 있나요 : 여기

package game; 

    import java.awt.Image; 
    import java.io.IOException; 
    import java.io.InputStream; 
    import java.util.Map; 
    import java.util.Scanner; 
    import java.util.TreeMap; 
    import javax.imageio.ImageIO; 

    public class ImageLoader { 

     public Image loadedImage; 
     private Map<String, Image> images; 

     public ImageLoader(){ 
      TreeMap<String, Image> map = new TreeMap<String, Image>(); 
      images = map; 

     } 

     public Image getImage(String s){ 
      System.out.println(images); 
      try 
      { 

       if(images.containsKey(s)){ 
        System.out.println("Loaded image."); 
        return images.get(s); 
       } 
       else 
       { 
        System.out.println("Not loaded."); 
        ClassLoader myLoader = this.getClass().getClassLoader(); 
        InputStream imageStream = myLoader.getResourceAsStream(s); 
        loadedImage = ImageIO.read(imageStream); 
        images.put(s, loadedImage); 
        System.out.println(images); 
        return images.get(s); 
       } 
      } 
      catch (IOException e) 
      { 
       System.out.println ("Could not load: " + e); 
      } 
      return null; 
     } 


    } 

는 실행할 때 콘솔 출력입니까?

+0

이 클래스를 어떻게 호출합니까? 코드 붙여 넣기. 당신이해야 할 일은 캐시 이미지가 싱글 톤 패턴을 사용하고 getInstance가 동기화되어 있는지 확인하는 것입니다. http://en.wikipedia.org/wiki/Singleton_pattern – anazimok

+0

저는'ImageLoader loader = new ImageLoader();로 호출합니다. \t \t backdrop = loader.getImage ("resources/Asteroid.jpg"); 여기서 백 드롭은 물론 이미지 유형입니다. – thehoule64

+1

매번 'ImageLoader'의 동일한 인스턴스를 사용하고 있습니까? 다시 작성 하시겠습니까? – Todd

답변

0

매번 새로운 ImageLoader이 나올 것으로 생각됩니다.

관련 문제