import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;public class Test extends Frame
{ private static final long serialVersionUID = 1L; static Image aquariumImage; public Test()
{
addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
dispose();
System.exit(0);
}
});
} public static void main(String[] args)
{
Test test = new Test();
test.go();
test.setSize(600, 435);
test.setVisible(true); Graphics g = test.getGraphics();
while (!g.drawImage(aquariumImage, 0, 0, test));
} public void go()
{
String address = getClass().getResource("bubbles.gif").getPath().toString();
System.out.println(address);
aquariumImage = Toolkit.getDefaultToolkit().getImage(address);

}
}为了teacher assistant,说应该用URL方式调用图片,不确定这里是否是用了URL方式,如果不是又是怎样?本程序eclipse中运行正常(随便用一张gif图片) ,但等打成jar包后就无法运行了,还听说很多人都碰到类似问题了,期待高手给予帮助。

解决方案 »

  1.   

    你自己可以判断一下有没有取到图片呀System.out.println(address);
    打印出来的是什么
    aquariumImage = Toolkit.getDefaultToolkit().getImage(address);
    看看这行完了后aquariumImage是不是null
    用URL改成这样
    URL address = getClass().getResource("/bubbles.gif);
    aquariumImage = new ImageIcon(address).getImage();
    注意
    bubbles.gif放到class根目录下
      

  2.   

    不行,这方法连eclipse中都显示不出图片。
      

  3.   

    经过反复试验,终于ok了,不是用ImageIcon,还是用Toolkit,不过是结合URL的。URL address = getClass().getResource("bubbles.gif");
    aquariumImage = Toolkit.getDefaultToolkit().getImage(address);感谢fool_leave(请及时结贴)给予的帮助。稍后结帖。
      

  4.   

    我也出现同样的问题,当在eclips 中运行的时候都是正常的,也可以找到相对路径,但是一旦打包成JAR,双击运行一点反映都没,只是在系统管理里面多了个进程,不知道是哪里出了问题,各位高手帮忙看下,这个问题困扰我好久了就是解决不了.谢谢下面是程序:import java.awt.*;
    import java.awt.event.*;
    import java.net.URL;
    import java.net.URLClassLoader;import javax.swing.AbstractButton;
    import javax.swing.JButton;
    import javax.swing.JPanel;
    import javax.swing.JFrame;
    import javax.swing.ImageIcon;
    public class ButtonDemo extends JPanel
                            implements ActionListener {
        protected JButton b1, b2, b3;    public ButtonDemo() {
            ImageIcon leftButtonIcon = new ImageIcon(createImage("images/right.gif"));
            ImageIcon middleButtonIcon = new ImageIcon(createImage("images/middle.gif"));
            ImageIcon rightButtonIcon = new ImageIcon(createImage("images/left.gif"));        b1 = new JButton("失效中间按钮(D)", leftButtonIcon);
            b1.setVerticalTextPosition(AbstractButton.CENTER);//水平中间对齐
            b1.setHorizontalTextPosition(AbstractButton.LEADING);//相当于LEFT
            b1.setMnemonic(KeyEvent.VK_D);//将b1邦定alt+D键
            b1.setActionCommand("disable");        b2 = new JButton("M中间按钮", middleButtonIcon);
            b2.setVerticalTextPosition(AbstractButton.BOTTOM);
            b2.setHorizontalTextPosition(AbstractButton.CENTER);
            b2.setMnemonic(KeyEvent.VK_M);//将b2邦定alt+M键        b3 = new JButton("E激活中间按钮", rightButtonIcon);
            b3.setMnemonic(KeyEvent.VK_E);//将b3邦定alt+E键
            b3.setActionCommand("enable");
            b3.setEnabled(false);
            
            b1.addActionListener(this);
            b3.addActionListener(this);
            b1.setToolTipText("点击这个按钮,将使中间的按钮失效!");
            b2.setToolTipText("点击这个按钮,没有任何的事件发生!");
            b3.setToolTipText("点击这个按钮,将使中间的按钮有效");        add(b1);
            add(b2);
            add(b3);
        }    public void actionPerformed(ActionEvent e) {
            if ("disable".equals(e.getActionCommand())) {
                b2.setEnabled(false);
                b1.setEnabled(false);
                b3.setEnabled(true);
            } else {
                b2.setEnabled(true);
                b1.setEnabled(true);
                b3.setEnabled(false);
            }
        }   Image createImage(String filename) {    Image image = null;
        URL address = getClass().getResource(filename);
        image = Toolkit.getDefaultToolkit().getImage(address);
        System.out.println(address);
        return image;
      }    public static void main(String[] args) {        JFrame.setDefaultLookAndFeelDecorated(false);        JFrame frame = new JFrame();
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            
            ButtonDemo newContentPane = new ButtonDemo();
            newContentPane.setOpaque(true); 
            frame.setContentPane(newContentPane);        frame.pack();
            frame.setVisible(true);
        }
    }