快速业务通道

JBuilder 2005开发Applet游戏全接触 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-24
ot;外来客",客户机没有将其当作"自家人"来对待。所以Applet不能执行访问本地文件系统、执行本地程序,保存统计数据到文件也就发生异常了。在本章后面,我们将详细介绍如何通过数字签名的技术来绕过Applet的安全限制,让客户机将这个"外来客"宾至如归。

JBuilder 2005开发Applet游戏全接触(12)

时间:2010-04-27 天极

4、关注Applet生命周期

Applet在浏览器中运行时,第一次加载Applet,将调用init()方法,接着调用start(),当窗口关闭或页面替换时先调用stop()然后再调用destroy()。

因为我们的游戏是多线程的程序,当关闭浏览器时,如果Applet的字母下落线程还在运行可能会引发异常。在JBuilder中右击TypeTrainApplet.html,在弹出的菜单中选择Run using default,JBuilder使用AppletViewer运行TypeTrainApplet。启动游戏后直接关闭窗口,在信息窗格中将报告以下的异常信息:

java.lang.NullPointerException

at game.TypeTrainApplet$DropCharThread.draw(TypeTrainApplet.java:290)

at game.TypeTrainApplet$DropCharThread.run(TypeTrainApplet.java:258)

这是由于关闭AppletViewer后,TypeTrainApplet画布的Graphics对象先被销毁,而字母下落线程依然调用访问这个对象,所以抛出空指针异常。

我们可以通过Applet的生命周期解决这个问题:Applet在被关闭前会调用stop()和destroy()方法。我们只要利用stop()方法就可以了,在stop()方法中置一个标识,线程通过判断这个标识就可以知道当前窗口是否关闭,当发现关闭时就不再运行。

1. public class TypeTrainApplet extends JApplet { 2.  … 3.  boolean isClose = false;//用于标识Applet窗口有没有关闭 4.  … 5.  public void start() { 6.   isClose = false; 7.  } 8. 9.  public void stop() { 10.   statusCode = 0;//停止游戏 11.   isClose = true;//窗口关闭 12.  } 13.  … 14.  private class DropCharThread extends Thread { 15.   if(isClose) return ;//发现窗口关闭马上返回 16.   draw(ACTION_DRAW_FONT); 17.   try { 18.    while (c != pressKeyChar && y < canvas.getHeight() && 19.           statusCode != 0) { 20.     synchronized (canvas) { 21.      while (statusCode == 2) { 22.       canvas.wait(); 23.      } 24.     } 25.     draw(ACTION_CLEAR_FONT); 26.     y += stepLen; 27.     draw(ACTION_DRAW_FONT); 28.     Thread.sleep(stepInterval); 29.    } 30.    } catch (InterruptedException ex) { 31.   } 32.   if (!isClose) {//窗口没有关闭才后续处理 33.    draw(ACTION_CLEAR_FONT); 34.    if (statusCode != 0) { //游戏没有停止 35.     totalCount++; //统计总数 36.     if (y < canvas.getHeight()) { 37.      hitSound.play(); 38.      rightCount++; //击中 39.     } else { 40.      errorCount++; //打不中 41.     } 42.     drawResult(); 43.    } 44.   } 45.  } 46. }

Applet启动时调用start()方法,这方法里将窗口关闭标识置为false,如第6行所示,而当窗口关闭时stop()方法被调用,停止游戏并置窗口关闭标识,如第10~11行所示。字母下落线程的程序也要作相应的调整,在进入线程和结束线程都判断是否关闭了窗口。

JBuilder 2005开发Applet游戏全接触(13)

时间:2010-04-27 天极

打包并进行数字签名

浏览器对Applet的数字签名支持并没有一个统一的标准,但是一

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号