Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在浏览器中运行Java小程序:;“未找到类异常”;_Java_Applet_Classnotfoundexception - Fatal编程技术网

如何在浏览器中运行Java小程序:;“未找到类异常”;

如何在浏览器中运行Java小程序:;“未找到类异常”;,java,applet,classnotfoundexception,Java,Applet,Classnotfoundexception,我试图在浏览器中显示一个Java小程序——我知道这个问题已经被问了很多次,但我似乎找不到适合这种情况的答案——在过去的几天里,我尝试了从将HTML文件移动到目录结构中的各个位置到使用与deployJava()API 该代码在Eclipse中作为一个独立的小程序运行良好,但当我尝试在浏览器中运行它时,会出现“ClassNotFound”或“ClassDefNotFound”异常。我已将代码打包到.jar中,并将.jar与HTML文件放在同一文件夹中,java代码如下所示: package myPa

我试图在浏览器中显示一个Java小程序——我知道这个问题已经被问了很多次,但我似乎找不到适合这种情况的答案——在过去的几天里,我尝试了从将HTML文件移动到目录结构中的各个位置到使用
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);
    }
}
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>

变量属性={
代码:'myClass.class',
存档:“myApplet.jar”,
宽度:500,高度:500
};
var参数={latLong:total_path};
变量版本='1.8';
runApplet(属性、参数、版本);
我还尝试使用
codebase:'myApplet.jar'
而不是
archive:
,但这也不起作用-我一直遇到相同的两个异常之一。救命啊


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

浏览器越来越不愿意运行小程序。此外,Java本身需要越来越多的安全应用程序。您的Java版本非常重要

更重要的是,当小程序由于这些原因无法运行时,错误消息通常非常隐晦或不明确


很明显,您至少需要在jar的清单中声明一些属性,例如您想要声明的事实(这将稍微放松安全限制)。

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

在这篇文章中,你对宣言有了更多的了解,我已经展示了一种行之有效的方法

即:


var attributes={id:'cdigApplet',代码:'cdig.cdigApplet',存档:'cdig-applet-1.0.jar',宽度:1,高度:1,类加载器\缓存:'false'};
var参数={persistState:false,cache_选项:'no'};
runApplet(属性、参数,“1.8”);
我的小程序

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

}

我以前从未使用过小程序,但您不应该将类名传递给
code
参数吗?当您的类被命名为
myClass
@EricMartinez时,您正在传递
myApplet.class
,这应该是一个答案。如果你把它改成一个,请告诉我。@AndrewThompson我没有把它作为答案发布,因为我只是在猜测,就像我说的,我从来没有用过,也没有写过小程序。@EricMartinez我用过,所以让我确认你的怀疑
myApplet.class
应该是
myClass
,因为
code
属性需要类的完全限定名。由于这个类不在包中,所以它只是类名本身(没有扩展名)。谢谢。这个修好了!myPackage/myClass成功了。再次感谢你!