前几天冯姐和我说,由于工作需要,要几个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运行,炫吧!