你的竟然可以运行在我这里死活都无法运行uncatch error

解决方案 »

  1.   

    http://java.sun.com/docs/books/tutorial/uiswing/misc/icon.html
      

  2.   

    通过实现PanelUI在JPanel上绘图:import java.awt.Image;
    import java.awt.MediaTracker;
    import java.awt.Toolkit;import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JPanel;public class ImgPanel extends JPanel
    {
        private Image img;    public ImgPanel()
        {
        }    public void updateUI()
        {
            setUI(ImgPanelUI.getInstance());
        }    public Image getImg()
        {
            return img;
        }    public void setImg(Image image)
        {
            img = image;
        }    public static void main(String[] args)
        {
            try
            {
                JFrame frame = new JFrame("test");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                Image img = Toolkit.getDefaultToolkit().getImage(ImgPanel.class.getResource("test.jpg"));
                ImgPanel panel = new ImgPanel();            MediaTracker tracker = new MediaTracker(panel);
                tracker.addImage(img, 1);
                tracker.waitForID(1);
                System.out.println("load image ok");            panel.setImg(img);
                
                panel.add(new JButton("test1"));
                panel.add(new JButton("test2"));
                frame.getContentPane().add(panel);
                frame.setSize(640, 480);
                frame.setLocation(80, 60);
                frame.setVisible(true);
            }
            catch(Throwable e)
            {
                e.printStackTrace();
                System.exit(1);
            }
        }
    }import java.awt.Graphics;import javax.swing.JComponent;
    import javax.swing.plaf.ComponentUI;
    import javax.swing.plaf.basic.BasicPanelUI;
    public class ImgPanelUI extends BasicPanelUI
    {
        private static ImgPanelUI instance = new ImgPanelUI();    public static ComponentUI getInstance()
        {
            return instance;
        }    public void paint(Graphics g, JComponent c)
        {
            System.out.println("draw ImgPanel");
            ImgPanel panel = (ImgPanel) c;
            g.drawImage(panel.getImg(), 0, 0, panel.getWidth(), panel.getHeight(), panel);
            super.paint(g, c);
        }
    }这里的paint方法只会被调用一次
      

  3.   

    Applet的例子就请不要拿过了,我要的是Frame下的。运行环境是win2000+jdk1.3.1
      

  4.   

    我在我的机子上测试过了,只打到15就可以了,但估计不停的paint像是一个缓冲一样,在图片很大,没法一次画出来的时候,隔几秒就自动执行一下paint,直到图片出来为止
      

  5.   

    Awt被设计为假定图象可能是从缓慢的网络连接上得来的。java创建了一个新的线程来加载该文件,然后在文件实际加载完之前便返回。
    在你的paint()中,因为图片尚未加载,所以paint一次次地尝试调用绘制图片,count的增加值由加载的速度决定。可以采用MediaTracker来完成,这是它的典型应用
    你的改正代码如下,我调试过了,你看看  :)import java.awt.*;
    import java.awt.event.WindowAdapter;
    import java.awt.event.WindowEvent;
    import java.awt.MediaTracker;
    import javax.swing.*;public class InfoPanel extends JPanel
    {
        private Image img = Toolkit.getDefaultToolkit().getImage(
                    InfoPanel.class.getResource("DDG51.gif"));
        private int count = 0;    public InfoPanel()
        {
    MediaTracker tracker=new MediaTracker(this);
    tracker.addImage(img,0);
    try
    {
    tracker.waitForID(0);
    }
    catch(InterruptedException e)
    {
    e.printStackTrace();
    }
        }    public void paint(Graphics g){
            super.paint(g);
            g.drawImage(img,0,0,this.getWidth(),this.getHeight(),this);
            count ++;
            System.out.println(count);
        }    public static void main(String[] args){
            JFrame f = new JFrame();
            f.addWindowListener(new WindowAdapter(){
                public void windowClosing(WindowEvent e){
                    System.exit(0);
                }
            });
            f.setSize(400,200);
            InfoPanel info = new InfoPanel();
            f.getContentPane().add(info);
            f.setVisible(true);
        }
    }