what you have said is not right 
I have just tried your codes in JBX, but everything goes well.

解决方案 »

  1.   

    我只是绘制图片 img,但是在主类中的任何位置都可以绘制成功,而从类不行 :(
    static Graphics g;静态变量应该是固定吧
    虽然可以吧绘图放在主类,但这样就不像是面向对象了
      

  2.   

    Graphics是abstract类,你那么申明有什么用啊????对于Graphics这种,系统的唯一资源。必须由系统调度,不可能让你随便生成地。。你只能把系统生成的传递给你自己的绘图函数哦。例如你可以重写paint(Graphics g){
       载这里把g传递过去。
    }
      

  3.   

    在每次用到graphics对象的时候都应该向系统请求一个新的,
    底层的原因我不知道,不过以前我遇到过graphcis类型变量失效的情况
    也就是我把一个放了很长时间的graphics变量拿出来画图,结果没有反应.据我猜想失效的原因是,虽然我用g = graphics;将其保留了下来,
    但是系统内部可以对我所拿的graphics变量进行了处理,从此它不再是有效的,真正原因还望高手解答.一个graphics类型的变量大小有3K之多,所以API中有关graphics.dispose();的函数说明中说
        推荐你在用完了graphcis对象之后手动调用dispose();函数,以释放不需要再占用的内存.
        虽然你可以依赖垃圾收集去释放内存,但是在JVM 调用垃圾处理程序之前,这些无用的废料会一直占用大量的内存.
        但是在组件的paint(Graphics g)函数内不需要手动调用dispose,因为系统会自动调用.
    以上这些说明清楚地告诉我们,我们应该在每次绘图以前调用getGraphics()得到一个新的graphics变量,绘图完成后立刻dispose掉.而不是把这个graphics对象保存起来,每次均调用它绘图.
      

  4.   

    但是我把你的代码放到JBX下运行了,结果一切正常啊,所有要显示的东西都能正常显示.
    不知道为什么.
      

  5.   

    class One{
    static Graphics g;
         static Image img;   //加了这一句
    paint(){
                      g=img.getGraphics();//加了这一句
    g.drawString("g",100,100);
    }
    }
    class Fly extends java.applet.Applet{
    Image img;
    Graphics gBuffer;
    One one;
    init(){
    img=createImage(300, 300);
    gBuffer=img.getGraphics();
    One.g=gBuffer;      //加了这一句
                      One.img=img;
    one=new One();
    One.g.drawString("one.g",100,50);// 有效
    one.paint();//无效,一个点都没有出现  :(
    }
    paint(Graphics g){
    g.drawImage(img,0,0,this);
    }
    }
    但还是没有用,我用的是 sdk 1.4.2,winXP.p3,384M的内存,是不是对java的配置不对?
    我是对 Image img 操作,传递参数g 没有用
      

  6.   

    找到问题了,原来是 构造函数前我加了一个 void,晕啊!!
    我学 java 还不到半个月,碰到这种怪怪的问题太多了。