如何在浏览器中运行Java applet:“Class Not Found exception”

时间:2015-05-27 18:45:45

标签: java applet classnotfoundexception

我正在尝试将一个Java小程序显示在浏览器中 - 我知道这个问题已被多次询问但我似乎无法找到专门针对此案例的答案 - 在过去的几个几天我尝试了从将HTML文件移动到目录结构中的各个位置到使用<applet>deployJava() API之间的所有内容。

代码在Eclipse中作为独立applet运行良好,但是当我尝试在浏览器中运行它时,我得到“ClassNotFound”或“ClassDefNotFound”异常。我已将代码打包成.jar并将.jar放在与HTML文件相同的文件夹中,我的java代码如下:

package myPackage;
import java.awt.*;
import java.applet.*;

public class myClass extends java.applet.Applet{
    public void init(){
        String latLong = getParameter("unUsedParameter");
    }

    public void paint(Graphics g){
        g.drawString("Hello World",50,25);
    }
}

和Javascript代码如下:

<script src="https://www.java.com/js/deployJava.js"></script>
<section id = "java">
    <script type="text/javascript">
        var attributes = {
            code:'myClass.class',
            archive: 'myApplet.jar',
            width:500, height:500
        };
        var parameters = {latLong: total_path}; 
        var version = '1.8'; 
        deployJava.runApplet(attributes, parameters, version);
    </script> 
</section>

我也尝试使用codebase: 'myApplet.jar'代替archive:,但这也不起作用 - 我一直得到同样的两个例外之一。帮助!

编辑:首先,我的原始帖子中的代码:属性不正确,它应该已阅读'myClass.class'(上面已对此进行了更正)。让它发挥作用的答案是将code:属性更改为code: 'myApplet/myClass' - 感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

将'code'参数更改为'myPackage.myClass',而不是'myApplet.class'。

您对本文中的声明有更多见解,我已经展示了一种有效的方法Angular.js and Java Applet

即:

<script>
    <!-- applet id can be used to get a reference to the applet object -->
    var attributes = { id:'cdigApplet', code:'cdig.CDigApplet', archive:'cdig-applet-1.0.jar', width:1, height:1, classloader_cache:'false'} ;
    var parameters = {persistState: false, cache_option:'no' } ;
    deployJava.runApplet(attributes, parameters, '1.8');
</script>

我的小程序

package cdig;

import java.applet.Applet;
import java.security.AccessController;
import java.security.PrivilegedAction;
import java.util.Base64;


/**
 *
 * @author Ulysses Marins 
 */
public class CDigApplet extends Applet
{

    private static final long serialVersionUID = 1L;

    String ret;

    CDigApplet applet = this;

    @SuppressWarnings({ "rawtypes", "unchecked" })
    public String signFile(String fileID, String pin, String token)
    {
        AccessController.doPrivileged(new PrivilegedAction()
        {
            @Override
            public Object run()
            {
                try
                {
                    File objFile = new File(token);

                    System.out.println("Iniciando processo de assinatura.");

                    objFile.sign("json", sig);

                        System.out.println(ret);
                    } else {
                        throw new IllegalArgumentException("Não foi possível iniciar processo de assinatura.");
                    }

                }
                catch (Exception e)
                {
                    String sl = "{\"success\":false," + "\"message\":\"" + e.getMessage() + "\"}";
                    ret = sl;
                    System.out.println(sl);
                }

                return null;
            }
        });

        return ret;
    }

    public void init(){
    }

    public void destroy(){
    }

}

答案 1 :(得分:0)

浏览器越来越不愿意运行applet。 Chrome itself won't support the java plugin anymore very soon。此外,Java本身需要更多或更多安全的应用程序。您的Java版本非常重要。 Versions >=7 require signed applications

此外,由于这些原因applet无法运行时的错误消息通常非常神秘或不完整。

明确的是,你至少需要self-sign your applet,并在jar的清单中声明一些属性,例如你想run the code in a sandbox的事实(会放松一点安全限制。)