将f1和b1在主函数外声明。
//***:ButtonEvent.java;***
import java.awt.*;
import java.awt.event.*;public class ButtonEvent{//My add
Frame f1;
Button b1;//***program main()***
public static void main(String args[]){
//Frame f1=new MyFrame();
f1=new MyFrame();
//Button b1=new MyButton();
b1=new MyButton();
f1.add(b1);

//***define class MyFrame***
class MyFrame extends Frame{
MyFrame()
{super();
setSize(300,200);
show();
}
}
//***//***define class MyButton***
class MyButton extends Button implements ActionListener{
public MyButton(String s)
{super(s);
addActionListener(this);
}
public void actionPerformed(ActionEvent e){
System.out.println("Action");
}
}
//***}

解决方案 »

  1.   

    不对,应该将两个类外声明://***:ButtonEvent.java;***
    import java.awt.*;
    import java.awt.event.*;//***define class MyFrame***
    class MyFrame extends Frame{
    public MyFrame()
    {super();
    setSize(300,200);
    show();
    }
    }
    //***//***define class MyButton***
    class MyButton extends Button implements ActionListener{
    public MyButton(String s)
    {super(s);
    addActionListener(this);
    }
    public void actionPerformed(ActionEvent e){
    System.out.println("Action");
    }
    }
    //***
    public class ButtonEvent{
    //***program main()***
    public static void main(String args[]){
    Frame f1=new MyFrame();
    Button b1=new MyButton("hello");
    f1.add(b1);
    } }
      

  2.   

    另外由于MyButton的构造子是带参数的所以调用时需加参数。
    最好加上一个退出按钮。
      

  3.   

    pluto的说法是对的啊。谢谢,呵呵,又学到了一招。
      

  4.   

    楼上的不要误人子弟。那两个类是另一个类的内部类。好好看看Think In Java吧。
    俺记得不太清楚了,好像静态函数中用到的对象必须在函数外声明。否则就要用静态对象。
    不知道对不对。
      

  5.   

    MSDos好像死了一样,没有鼠标。
      

  6.   

    不是说可以在public class中定义其他非公共类的嘛?
      

  7.   

    那你自己好好看看Think IN Java中讲内部类的那一章。
    俺好长时间不用JAVA。也不太清楚为啥了
      

  8.   

    我靠,add进去你不设定bounds吗?
      

  9.   

    并且还少一句:f1.setVisible(true);
      

  10.   

    hehe ,vampirelord帮我把button显示出来了。thanks!
      

  11.   

    也可通过设定Layout来控制。
      

  12.   

    也可通过设定Layout来控制。
      

  13.   

    layout和bounds通常是结合起来用的。如果比较粗暴,就干脆设定layout为null,然后硬画。
      

  14.   

    我记得在public类里定义其他的类称为内部嵌套类(nested class).
    调用这些类比较麻烦:如class B in class A:
    A a=new A();
    A.B b=a.new B(); 等等。
      

  15.   

    z这么麻烦吗?
    ft,《JAVA 2 从入门到精通》John Zukowski 电子工业出版社
    这本书里面有很多pulic class 类中定义其他非公共类的,我都不知道他对不对?
    哎!!!
      

  16.   

    错误的根本原因是在static的方法main中引用了非static的内部类,如果把MyButton和MyFrame定义成static就可以。
    static成员在类倒入的时候就分配了内存空间,而非static的成员在生成实例的时候在分配,所以在调用static成员的时候,非static成员可能还不存在呢,当然不能调用。
    所以要生成一个非static的内部类的实例,先要有一个外部类的实例才行,就像楼上的那个class A,class B的例子一样。
      

  17.   

    以下是《Thinking in Java》中的原文:
    若想在除外部类非static方法内部之外的任何地方生成内部类的一个对象,必须将那个对象的类型设为“外部类名.内部类名”,就像main()中展示的那样:
    Parcel2.Contengs c=q.cont();
      

  18.   

    ?关于NT的NetBIOS错误『高手请入』(Danphel) 2-24 11:47 数据库开发类
    有谁能帮我解答?分数可以再加!!!