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