2013-08-04 4 views
1

упаковка основная;Почему изображения не отображаются?

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

Абсолютная ошибка пути? являются ли эти действительные пути к изображениям? –

+0

да, thoes являются правильные пути к им возрастов. – Steven

+0

Я пытался делать то, что я обычно делаю: '(ImageIcon ii = new ImageIcon (this.getClass(). GetResource (путь)); Изображение i = ii.getImage(); g.drawImage (i, 0, 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) скорее всего из-за неправильного FilePath

Редактировать Ваши комментарии:.. Я предпочитаю 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

Смежные вопросы