如何在浏览器中 运行 一个 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(){
}
}
我正在尝试让 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(){
}
}