前几天冯姐和我说,由于工作需要,要几个java 的小游戏程序,我就上网上google 了一下,发现网上是由很多的java小游戏程序,但写的好的,运行效果不错的基本上的都是java applet,必须得借助浏览器来运行,很是不方便,当时我就想,给它们改成java application,那不就方便多了!

  想法出来以后,就开始想想这个方法可不可行,当时我觉得肯定可行,因为不管是java applet,还是java application,最后无非都是编译成.class文件,前者是被浏览器内嵌执行,后者是直接在虚拟机上执行,况且我以前做过一些j2me的东西,当时用J2se编译出来的.class问价都能在j2me的编译器上执行,这个肯定也能实现。

   想法也可行,下一步技术着手开始实现了,这里有个建议,就是学程序的时候,一定要学得深一些,就是要知其所以然,要是对java applet 和 java application的运行机制都足够深的话,其实转化起来也不难,程序无非都有一个入口函数,顺着入口函数顺藤摸瓜,就会对程序的运行流程非常清晰,java applet的入口函数是init(),java application的是main(),那直接在java applet 里添加一个main()函数,调用init()不就完了吗,至于init()方法的流程是什么样的,我们也无需知道,这就和做车是一样一样的,举个例子,加入你想从北京到南京,但是你不知道路怎么走,你只知道从北京到天津,天津到南京怎么走,这时候该怎么办呢?上车呗,上从北京到天津的车,到了天津在坐天津到南京的车不就完了吗!就是转了一个弯。所以我这么改,

   

   在applet文件里添加:

public static void main(String[] args){ 
 
 
 

        init(); 
 
 
 

   }

对吗?

肯定不对,static 方法怎么可以调用非static 方法呢,接着又会想,那我New 一个实例以后再调用不就完了吗,假如applet文件名是Pintu.java,就这么写:

 public static void main(String[] args){

     Pintu pintu = new Pintu();

     pintu.init();

}

肯定也不对,

好了不卖关子了,直接说原理:

applet显示的时候必须要有一个背景(专业点的话可能是容器),在用浏览器执行的时候,它是显示在浏览器上的,当你把applet 转化为application的时候,浏览器这个容器没了,你必须给它再准备个容器,这里可以用JFrame当容器来显示applet,代码如下:

public static void main(String[] args){ 
   
 
   

      pintu applet = new pintu(); 
   
 
   

        JFrame frame = new JFrame("PinTu"); 
   
 
   

        frame.addWindowListener(new WindowAdapter() { 
   
 
   

          public void windowClosing(WindowEvent e){ 
   
 
   

            System.exit(0); 
   
 
   

          } 
   
 
   

        }); 
   
 
   

        frame.getContentPane().add( 
   
 
   

          applet, BorderLayout.CENTER); 
   
 
   

        frame.setSize(650,520); 
   
 
   

        applet.init(); 
   
 
   

        applet.start(); 
   
 
   

        frame.setVisible(true); 
   
 
   

         
   
 
   

     }

以前的applet文件里的其他内容一点也不用改,如果你用的是MyEclipse的集成开发环境,这时候该文件既可以当applet 运行,又可以当application运行,炫吧!