2014-12-31 2 views
-1

У меня есть этот код, но я не знаю, как загрузить изображение stone.png, чтобы я мог его использовать.Доступ к файлу .png в .jar-файле и его использование

package mine.mine.mine; 

import javax.imageio.ImageIO; 
import javax.swing.*; 

import java.awt.*; 
import java.awt.image.BufferedImage; 
import java.io.File; 
import java.io.IOException; 

public class MainGame { 
    private static void showGUI() 
    { JFrame frame = new JFrame("Mine Mine Mine"); 

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    JLabel emptyLabel = new JLabel(""); 
    emptyLabel.setPreferredSize(new Dimension(496, 496)); 
    frame.getContentPane().add(emptyLabel, BorderLayout.CENTER); 
    frame.pack(); 
    frame.setVisible(true); 
    BufferedImage img = null, diamond = null, emerald = null, gold = null, lapis = null, iron = null, redstone = null, coal = null; //Ignore these. 
    try { 
     img = ImageIO.read(new File("stone.png")); //Main problem is here. Used debug method on line 27. 
    } catch (IOException e) { 
     JOptionPane.showMessageDialog(null, "ERROR: The game has corrupted/missing files. Please redownload the game.", "Mine Mine Mine", JOptionPane.ERROR_MESSAGE); 
     JOptionPane.showMessageDialog(null, e.getStackTrace()); 
    } 



} 
    public static void main(String args[]){ 
     javax.swing.SwingUtilities.invokeLater(new Runnable() { 
      public void run() { 
       showGUI(); 
      } 
     }); 
    } 


} 

Я хочу, чтобы отобразить stone.png на JLabel или JFrame, это мой первый раз пытается это так, пожалуйста, не называйте меня нуб. ;)

ответ

2

изображения (или что-нибудь), хранящиеся в файле Jar не может быть доступ, как File, вместо этого вы должны использовать Class#getResource, который будет возвращать URL, который может быть использован во многих частях API, чтобы загрузить эти ресурсы ,

Если часть API не принимает URL, вы можете использовать Class#getResourcesAsStream, который вместо этого возвращает InputStream.

Что-то вроде ...

img = ImageIO.read(MainGame.class.getResource("stone.png")); 

Это предполагает stone.png по умолчанию/каталог верхнего уровня файла банка, если это в подкаталоге, вам нужно будет указать полный путь от корня файл jar

+0

Эй, спасибо, чувак, он работал :). Можете ли вы помочь мне отобразить это изображение в JLabel/JFrame? –

+0

[Как использовать ярлыки] (http://docs.oracle.com/javase/tutorial/uiswing/components/label.html) – MadProgrammer

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