【问题标题】:Applet does not show up in browser小程序不显示在浏览器中
【发布时间】:2011-09-30 19:56:57
【问题描述】:

我有以下小程序:http://s1.picofile.com/file/6922766596/Game.jar.html

还有我在jar之前的小程序:http://s1.picofile.com/file/6923855130/Game_III_Applet.7z.html

我已将它嵌入到我的 HTML 页面中,如下所示:

<applet code="FrameS.class" archive="Game.jar" width=1000 height=800></applet>

但是,我的 MSIE 浏览器中没有显示任何内容。这是如何引起的,我该如何解决?

【问题讨论】:

  • 我忘记写我的 html 以结尾
  • 不,您忘记阅读代码格式规则。您需要缩进 4 个空格的代码。我已经扫了这个问题。那里有很多噪音。否则,您只会收到反对票。只需直截了当和聪明地问问题。一点点努力,对你自己和我们都有很大的好处。
  • 你是真的!我真的很抱歉亲爱的..
  • 谢谢 Andrew..你非常有礼貌:&

标签: java jar applet


【解决方案1】:
Caused by: java.security.AccessControlException: 
    access denied (java.io.FilePermission back.jpg read)

Applet 应该使用 URL 来访问它们的资源。资源可以在一个 Jar 文件中(例如 4.7 meg Game.jar),它位于 applet 的运行时类路径(即归档属性中提到)或与 applet(或 applet 的代码库)在同一服务器上)。

在第一种情况下,可以使用 .. 形成 URL。

URL urlToPic = this.getClass().getResource("images/back.jpg");

.. 图像位于 Jar 的 images 路径中。

在第二种情况下,可以相对于小程序的代码库或文档库形成 URL。例如

URL urlToPic = new URL(this.getDocumentBase(), "images/back.jpg");

.. 图像位于包含小程序的目录的images 子目录中。

接受File 参数的方法通常也会接受InputStreamURL

【讨论】:

    【解决方案2】:

    当您仅提供 .jar 包时,我们无法对其进行测试

    请提供更多,或通过查看 java 错误控制台自行解决

    例如我得到了这个异常,说我缺少back.jpg 图像资源

    java.lang.reflect.InvocationTargetException
    at com.sun.deploy.util.DeployAWTUtil.invokeAndWait(DeployAWTUtil.java:116)
    at sun.plugin2.applet.Plugin2Manager.runOnEDT(Plugin2Manager.java:3542)
    at sun.plugin2.applet.Plugin2Manager.createApplet(Plugin2Manager.java:3073)
    at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Plugin2Manager.java:1498)
    at java.lang.Thread.run(Thread.java:680)
    Caused by: java.security.AccessControlException: access denied (java.io.FilePermission back.jpg read)
    at java.security.AccessControlContext.checkPermission(AccessControlContext.java:374)
    at java.security.AccessController.checkPermission(AccessController.java:546)
    at java.lang.SecurityManager.checkPermission(SecurityManager.java:532)
    at java.lang.SecurityManager.checkRead(SecurityManager.java:871)
    at sun.awt.SunToolkit.getImageFromHash(SunToolkit.java:871)
    at sun.awt.SunToolkit.getImage(SunToolkit.java:885)
    at apple.awt.CToolkit.getImage(CToolkit.java:934)
    at FrameS.<init>(FrameS.java:59)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
    at java.lang.Class.newInstance0(Class.java:355)
    at java.lang.Class.newInstance(Class.java:308)
    at sun.plugin2.applet.Plugin2Manager$13.run(Plugin2Manager.java:3061)
    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:199)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:677)
    at java.awt.EventQueue.access$000(EventQueue.java:85)
    at java.awt.EventQueue$1.run(EventQueue.java:638)
    at java.awt.EventQueue$1.run(EventQueue.java:636)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:647)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:296)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:211)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:201)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:196)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:188)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
    Exception: java.lang.reflect.InvocationTargetException
    

    【讨论】:

    【解决方案3】:

    在IE中嵌入小程序时请使用object标签,这是一个php函数,它根据浏览器输出小程序嵌入代码,您会看到不同的浏览器处理方式不同-

    function getApplet($jarFile,$className,$params = array(),$width=1,$height=1,$name='japplet')
    {
    $retVal = "";
    
    $useApplet = 0;
    $user_agent = $_SERVER['HTTP_USER_AGENT'];
    
    if (stristr($user_agent, "konqueror") || stristr($user_agent, "macintosh") || stristr($user_agent, "opera")) {
        $useApplet = 1;
        $retVal = sprintf('<applet name="%s" id="%s" archive="%s" code="%s" width="%s" height="%s" MAYSCRIPT >',$name,$name,$jarFile,$className,$width,$height);
    } else {
        if (strstr($user_agent, "MSIE")) {
            $retVal = sprintf('<object  name="%s" id="%s" classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93" style="border-width:0;" codebase="http://java.sun.com/products/plugin/autodl/jinstall-1_4_1-windows-i586.cab#version=1,4,1"  width= "%s" height= "%s">',$name,$name,$width,$height);
        } else {
            $retVal = sprintf('<object  name="%s" id="%s" type="application/x-java-applet;version=1.4.1" width= "%s" height= "%s">',$name,$name,$width,$height);
        }
    
        $params['archive'] = $jarFile;
        $params['code'] = $className;
        $params['mayscript'] = 'true';
        $params['scriptable'] = 'true';
        $params['name'] = $name;
    
    }
    
    foreach ($params as $var=>$val)
    {
        $retVal .= sprintf('<param name="%s" value="%s">',$var,$val);
    }
    
    $retVal .= 'It appears you do not have Java installed or it is disabled on your system.<br />
                    Please download it <a href="http://www.java.com/getjava/" class="link" target="_blank">here</a>';
    if ($useApplet == 1) {
        $retVal .= '</applet>';
    } else {
        $retVal .= '</object>';
    }
    
    return $retVal;
    }
    

    嵌入小程序时需要对象标签。

    【讨论】:

    猜你喜欢
    • 2018-02-16
    • 2013-05-29
    • 1970-01-01
    • 2013-12-13
    • 2017-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多