如何在浏览器中 运行 一个 Java 小程序:"Class Not Found exception"

How to run a Java applet in the browser: "Class Not Found exception"

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

代码 运行 在 Eclipse 中作为独立的小程序很好,但是当我尝试在浏览器中 运行 它时,我得到 "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);
    }
}

和Java脚本代码如下:

<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: 但这也不起作用 - 我不断收到相同的两个异常之一。帮助!

编辑:首先,code: 属性在我原来的 post 中是不正确的,它应该是 'myClass.class'(这已在上面更正)。让它工作的答案是将 code: 属性更改为 code: 'myApplet/myClass' - 感谢您的帮助!

浏览器越来越不愿意运行小程序。 Chrome itself won't support the java plugin anymore very soon. Additionally, Java itself is requiring more or more secured applications. Your version of Java matters a lot. Versions >=7 require signed applications.

更重要的是,由于这些原因,小程序无法运行时的错误消息通常非常神秘或不存在。

很明显,您至少需要 self-sign your applet, and declare some properties in the jar's manifest, such as the fact that you want to run the code in a sandbox(这会放宽一些安全限制)。

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

你对这个 post 中的声明有更多的见解,我已经展示了一种有效的方法

即:

<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(){
    }

}