import java.util.Timer; 
import java.awt.*; 
import java.awt.event.*; 
public class hx { 
         a e;
       Frame f; 
public void p()
     {          Frame f= new Frame(); 
         Timer timer = new Timer(); 
         
       e=new a(); 
        
       f.add(e,BorderLayout.CENTER);       e.setBounds(100,0,20,20);
         f.setSize(300,300); 
         f.setVisible(true); 
         timer.schedule(new MyTask(), 1000, 100);
       }         class MyTask extends java.util.TimerTask 

public void run(){ 
a.i+=90; 
a.repaint();//重绘 

} class a extends Canvas
   {   int i=0;
         public void paint(Graphics g) 
     { 
         g.setColor(Color.red); 
         g.fillArc(0, 0, 100, 100, i, 180);
         g.setColor(Color.yellow); 
         g.fillArc(0, 0, 100, 100, i+90, 180);
         g.setColor(Color.blue);
         g.fillArc(0, 0, 100, 100, i+180, 180);  
      } 
     }
public static void main(String[] args)
   {
       hx t=new hx();t.p();
    }

提示是:无法从静态上下文应用非静态变量i和repaint()

解决方案 »

  1.   


    e.i += 90;
    e.repaint();
      

  2.   

    你的程序里少写了两句关键代码
    <1>e.i+=90;
    <2>e.repaint();//作用是重新绘制
      

  3.   

    import java.awt.BorderLayout;
    import java.awt.Canvas;
    import java.awt.Color;
    import java.awt.Frame;
    import java.awt.Graphics;
    import java.awt.event.WindowAdapter;
    import java.awt.event.WindowEvent;
    import java.util.Timer;public class hx {
    A e; Frame f; public void p() { Frame f = new Frame();
    Timer timer = new Timer(); e = new A(); f.add(e, BorderLayout.CENTER); e.setBounds(100, 0, 20, 20);
    f.setSize(300, 300);
    f.setVisible(true);
    //添加了这个
    f.addWindowListener(new WindowAdapter(){
    public void windowClosing(WindowEvent e){
    System.exit(0);
    }
    });
    timer.schedule(new MyTask(e), 1000, 100);
    } class MyTask extends java.util.TimerTask {

    //修改了这里
    A a;

    //修改了这里
    public MyTask(A a){
    this.a=a;
    }
    public void run() {
    a.i += 90;
    a.repaint();// 重绘
    }
    } //把类名给你大写了
    class A extends Canvas {
    int i = 0; public void paint(Graphics g) {
    g.setColor(Color.red);
    g.fillArc(0, 0, 100, 100, i, 180);
    g.setColor(Color.yellow);
    g.fillArc(0, 0, 100, 100, i + 90, 180);
    g.setColor(Color.blue);
    g.fillArc(0, 0, 100, 100, i + 180, 180);
    }
    } public static void main(String[] args) {
    hx t = new hx();
    t.p();
    }
    }
      

  4.   

    看一下你的访问修饰符static是不是没加
    要么你直接创建对象调用算了
    static 是类级的,可以用点运算符调用
    没有static修饰的就需要创建该类对象进行调用!