2013-08-04 209 views
1

package main;爲什麼圖像不顯示?

import java.awt.Color; 
import java.awt.DisplayMode; 
import java.awt.Font; 
import java.awt.Graphics; 
import java.awt.Graphics2D; 
import java.awt.Image; 
import java.awt.RenderingHints; 

import javax.swing.ImageIcon; 
import javax.swing.JFrame; 

public class ImageTest extends JFrame { 

public static void main(String[] args) { 
    DisplayMode displayMode; 

    if (args.length == 3) { 
     displayMode = new DisplayMode(Integer.parseInt(args[0]), 
       Integer.parseInt(args[1]), Integer.parseInt(args[2]), 
       DisplayMode.REFRESH_RATE_UNKNOWN); 
    } else { 
     displayMode = new DisplayMode(800, 600, 16, 
       DisplayMode.REFRESH_RATE_UNKNOWN); 
    } 

    ImageTest test = new ImageTest(); 
    test.run(displayMode); 
} 

private SimpleScreenManager screen; 
private boolean imagesLoaded; 

private Image bgImage; 
private Image opaqueImage; 
private Image transparentImage; 
private Image translucentImage; 
private Image antiAliasedImage; 

private void run(DisplayMode displayMode) { 
    setBackground(Color.blue); 
    setForeground(Color.white); 
    setFont(new Font("Dialog", Font.PLAIN, 24)); 
    imagesLoaded = false; 
    screen = new SimpleScreenManager(); 
    try { 
     screen.setFullScreen(displayMode, this); 
     loadImages(); 

     try { 
      Thread.sleep(10000); 
     } catch (Exception e) { 

     } 
    } catch (Exception e) { 

    } finally { 
     screen.restoreScreen(); 
    } 
} 

private void loadImages() { 
    bgImage = loadImage("/images/background.png"); 
    opaqueImage = loadImage("/images/opaque.png"); 
    transparentImage = loadImage("/images/transparent.png"); 
    translucentImage = loadImage("/images/translucent.png"); 
    antiAliasedImage = loadImage("/images/antialiased.png"); 
    imagesLoaded = true; 
    repaint(); 
} 

private Image loadImage(String fileName) { 
    return new ImageIcon(fileName).getImage(); 

} 

public void paint(Graphics g) { 
    if (g instanceof Graphics2D) { 
     Graphics2D g2 = (Graphics2D) g; 
     g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, 
       RenderingHints.VALUE_TEXT_ANTIALIAS_ON); 
    } 

    g.drawImage(opaqueImage, 0, 0, this); 

    if (imagesLoaded) { 
     g.drawImage(bgImage, 0, 0, null); 
     drawImage(g, opaqueImage, 0, 0, "Opaque"); 
     drawImage(g, transparentImage, 320, 0, "Transparent"); 
     drawImage(g, translucentImage, 0, 300, "Translucent"); 
     drawImage(g, antiAliasedImage, 320, 300, 
       "Translucent (Anti-Aliased)"); 
    } else { 
     g.drawString("Loading Images...", 5, 24); 
    } 
} 

public void drawImage(Graphics g, Image image, int x, int y, String caption) { 

    g.drawImage(image, x, y, this); 
    g.drawString(caption, x + 5, y + 24 + image.getHeight(null)); 

} 
} 

沒有錯誤!程序運行時,它顯示文本,但不顯示圖像。這意味着loadImages()的作品,它必須是我的繪畫方法的錯誤。我究竟做錯了什麼!?!?

我看不出有什麼不對我的路徑: enter image description here

+0

絕對路徑的錯誤?是圖像的有效路徑? – 2013-08-04 05:13:04

+0

是,thoes是IM的正確路徑年齡。 – Steven

+0

我試着做我平時做的事: ,這個);' 它工作得很好 – Steven

回答

3

如果你看一看的ImageIcon源,你會發現,ImageIcon(String)構造函數調用另一個構造

ImageIcon(String filename, String description) { 
    image = Toolkit.getDefaultToolkit().getImage(filename); 
    if (image == null) { 
     return; 
    } 
    this.filename = filename; 
    this.description = description; 
    loadImage(image); 
} 

.getImage()

public Image getImage() { 
    return image; 
} 

如果它無法加載圖像,圖像將只是b e null不會引發任何錯誤。您的代碼失敗(默默)加載圖像(用System.out.println(image)最有可能的檢查,因爲不正確的文件路徑的這個

編輯您的意見:我喜歡ImageIO加載我的文件餵給它的InputStream更詳細和有讓我從罐子中加載文件的額外好處。更改

private Image loadImage(String fileName) { 
    return new ImageIcon(fileName).getImage(); 
} 

private Image loadImage(String fileName) { 
    return ImageIO.read(getClass().getResourceAsStream(fileName)); 
} 
+0

我看不出有什麼不對我的路徑:/ 也是我嘗試了使用和不使用/路徑 – Steven

+0

之前,當我嘗試......是System.out.print 我得到這個 '空 空 [email protected] [email protected] [email protected] '看來,因爲它最初是空 – Steven

+0

,然後得到的圖像後 – Steven