书上说用Image image = ImageIO.read(new File(filename));
Graphics g = image.getGraphics();
g.drawImage(image, x,y,null);可是执行Graphics g = image.getGraphics()总是返回空指针。为什么?(filename是正确的)另:在Graphics.drawImage 在JAPPLET,JFRAME,JPANEL上是不是都能绘制出图像?

解决方案 »

  1.   

    在绘图的时候将Graphics强制转换成Graphics2D试试看
    Image image = ImageIO.read(new File(filename));
    Graphics g = image.getGraphics();
    Graphics2D comp2D = (Graphics2D)g;
    comp2D.drawImage(image,new AffineTransform(1f,0f,0f,1f,0,0), null);
    另:Graphics2D.drawImage在Jlabel上面都可以画,我想上述的几个都可以吧。
      

  2.   

    你可以用image=getImage(getDocumentBase(),"filename");取得图片
      

  3.   

    filename中注意要用双斜杠"C:\\Documents and Settings...."
      

  4.   

    to:wxm47
      问题是,在转换之前,Graphics g = image.getGraphics() 已经是空指针出错了to: Jhala_Main
    用getDocumentBase也返回空指针错误.这是表示图片不存在吗?可图片的确是有的to: Beatles_The
    我用了双斜杠的.JBuilder里单斜杠无法通过编译的
    附代码如下:import java.awt.*;
    import javax.imageio.*;
    import java.io.*;
    import javax.swing.*;
    import java.awt.event.*;class ImageTest extends JApplet{
        public ImageTest() {
                Image image = null;
               try {
                    image = ImageIO.read(new File("c:\\aa.bmp"));            } catch (IOException ex) {
                    System.out.println("Exception");
                }
                //image=getImage(getDocumentBase(),"c:\\aa.bmp");
                System.out.println("No Exception");
                Graphics g = image.getGraphics();
                g.drawImage(image, 0, 0, null);
            }    public static void main(String[] args) {  
            ImageTest imageTest = new ImageTest();
            run(imageTest,0,0);
        }    public static void run(JApplet applet, int width, int height){
            JFrame frame = new JFrame();
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.getContentPane().add(applet);
            frame.setSize(width, height);
            applet.init();
            applet.start();
            frame.setVisible(true);
        }
    }
    返回信息:
    java.lang.NullPointerException
    at ImageTest.<init>(ImageTest.java:19)
    at ImageTest.main(ImageTest.java:24)
    No Exception
    c:\aa.bmp是存在的,返回No Exception表示获取图片没有错误吧?为什么又会返回空指针呢?
    若用getDocumentBase则返回错误
    java.lang.NullPointerException
    at java.applet.Applet.getDocumentBase(Applet.java:125)
    at ImageTest.<init>(ImageTest.java:17)
    at ImageTest.main(ImageTest.java:24)
    Exception in thread "main" 
    结果大同小异请大家帮我找找原因
      

  5.   

    第十九行就是 Graphics g = image.getGraphics(),怎么看也没有错,见鬼
      

  6.   

    我刚接触Java,这个问题应该不难吧?
    分数丢在地上都没人捡么?
    或者,谁有显示本地图片的相关代码贴一段出来参考也好啊
      

  7.   

    你的程序是applet还是frame?
    继承JApplet却没有init()或start()入口函数,
    却有构造函数和main()函数?在JApplet上绘画:
    应在paint(Graphics g)中写画图程序体.
    然后用repaint()调用.
    public void init()
    {
       repaint();
    }
    public void paint(Graphics g)
    {
      Image image=Toolkit.getDefaultToolkit().getImage("picture/logo.jpg")
      g.drawImage(image, x,y,null);
    }而在JFrame上绘画,需要先调用画布类:
    java.awt.Canvas
    先用一个类继承它,重载其paint(Graphics g)方法.
    然后创建它的对象调用.
      

  8.   

    Jhala_Main(--不爱动手的程序员--) 
    我曾经用image=getImage(getDocumentBase(),"filename");打开图片。但是每次都是失败的。调试发现image为空。不知道为什么。
      

  9.   

    不好意思,除了趟长差,这个帖子一直没有结。眼下没有时间试,先结了吧,拖得太长了。谢谢javaseek