在applet中我用 Applet d = getAppletContext().getApplet("app1")来获取同页中name是"app1"的applet,但是一运行就提示错误如下:
java.lang.NullPointerException at java.applet.Applet.getAppletContext(Unknown Source) at ex31.<init>(ex31.java:19) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) at java.lang.reflect.Constructor.newInstance(Unknown Source) at java.lang.Class.newInstance0(Unknown Source) at java.lang.Class.newInstance(Unknown Source) at sun.applet.AppletPanel.createApplet(Unknown Source) at sun.plugin.AppletViewer.createApplet(Unknown Source) at sun.applet.AppletPanel.runLoader(Unknown Source) at sun.applet.AppletPanel.run(Unknown Source) at java.lang.Thread.run(Unknown Source)但是那个applet是存在的,不知道是为什么?

解决方案 »

  1.   

    可能执行Applet d = getAppletContext().getApplet("app1")时,app1还没有编译好~没有执行到~
      

  2.   

    1、在html中,要有name标签,如
    <applet name="app1" code=app1 width=300 height=400></applet>2、Applet d = getAppletContext().getApplet("app1")不要放在init中,最早在start中。
      

  3.   

    3、最好是
    app1 d=(app1)getAppgetAppletContext().getApplet("app1");
      

  4.   

    我看了楼主贴出的错误提示,可以看出问题所在:
    1)java.lang.NullPointerException,表明是空引用。问题在于虽然你在代码中调用了
       getAppletContext().getApplet("app1")函数,但由于某些原因(比如app1尚未实例化),
       导致这个函数获取applet对象失败,即为空对象。
    2)在同一个网页中嵌入多个Applet时,原则上可以相互获取各自的引用进而调用公共方法,
       但由于各Applet的代码大小可能差别很大,所以网络装载时间和实例化的进度将无法保证
       同时完成,即无法保证某个Applet通过getAppletContext().getApplet就一定能找到那个
       对象,所以推荐两种办法:
       A)办法一:
         用while循环,直到getAppletContext().getApplet返回的Applet
         对象非空后,再进行余下的操作。
          ......
          Applet app = null;
          while(app==null) {
            app = getAppletContext().getApplet("app1");
          }
          ......
       B)由于while循环太占用CPU资源,所以办法二:
         在applet的初始化函数中启动一个线程,专门用于检测
         getAppletContext().getApplet("app1")函数返回的applet对象是否为空,
         直到非空时退出线程,再进行下一步操作。