发现编译JApplet时总是生成两个class: *.class 和 *$1.class

解决方案 »

  1.   

    一个class中可能有其他的类 jbuilder里面button的事件 往往是一个类 编译之后会生成.class文件
      

  2.   

    你的Java文件中可以定义多个Class,不过只能有一个是public
    或者你的Class里面有内部类
    LZ的情况应该是内部类
      

  3.   

    另一个class中类 在jbuilder里同样要编译一个.class文件。
    这里生成的*.class 和 *$1.class两个类
    一个是主类,另一个是你在程序中定义一个名为1的类。所以编译是会出现一个*$1.class。
      

  4.   

    不是很明白楼上的解析
    我附上源代码:
    -----------------------------------------------------------------------------------------------
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
    import java.net.URL;public class ATMPlayer extends JApplet implements Runnable {
      private int index=4; //图片的索引
      private Thread changer; //动态改变图片的线程,形成动画效果
      private boolean stopFlag=true;  //控制线程启动与关闭的标志
      private Image[] images; //存放钞票图片
      private Image mouth; //吐钞口
      private JButton contrlButton=new JButton("  开始取款! ");  public void init() {    images=new Image[4];
        
        //作为独立应用程序时通过以下这段代码从本地机器加载图片
        Toolkit tk=getToolkit();
        images[0]=tk.getImage("F:\\money1.jpg");
        images[1]=tk.getImage("F:\\money2.jpg");
        images[2]=tk.getImage("F:\\money3.jpg");
        images[3]=tk.getImage("F:\\money4.jpg");
        mouth=tk.getImage("F:\\mouth.jpg");    contrlButton.addActionListener(new ActionListener(){
          public void actionPerformed(ActionEvent e){
            if(stopFlag)start();
            else stop();
        }});    Container contentPane=getContentPane();
        contentPane.setBackground(Color.WHITE);
        contentPane.add(contrlButton, BorderLayout.NORTH);
      }  public void start(){
        changer=new Thread(this);
        stopFlag=false;
        index=0;
        contrlButton.setText("  够啦! ");
        changer.start();
      }  public void paint(Graphics g) {
        super.paint(g);
        g.drawImage(mouth,100,45,this);
        synchronized(this){if(index<4)g.drawImage(images[index],107,50,this);}
      }  public void stop(){
        stopFlag=true;
        contrlButton.setText("  开始取款! ");
      }  public void run(){
        while(!stopFlag){
          repaint(); //The word will be redrawed with new fontSize
          try{
            if(index==3)Thread.sleep(500);
            else Thread.sleep(200);
          }catch(InterruptedException e){throw new RuntimeException(e);}      if(++index>4) index=0;   //显示下一张照片
        }    index=4;
        repaint();  //刷新图形
      }  public static void main(String args[]){
        JFrame gui=new JFrame("取款机");
        ATMPlayer atm=new ATMPlayer();
        atm.init();    gui.setContentPane(atm);
        gui.setSize(300,300);
        gui.setVisible( true );
        gui.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
      }
    }
      

  5.   

     contrlButton.addActionListener(new ActionListener(){ 
          public void actionPerformed(ActionEvent e){ 
            if(stopFlag)start(); 
            else stop(); 
        }}
    );匿名内部类
      

  6.   

    匿名内部类生成的.class文件是"外部类类名"$"n".class n是该类的第几个匿名内部类。