这是JSP页面applet标签:
<applet code="localfile" width=150 height=150>
<param name="archive" value="localfile.jar">
</applet>
Applet代码是:
package locf;
import java.applet.*;
import java.util.*;
import java.lang.*;
import java.io.*;
public class localfile extends Applet
{
@Override
public void init() {}
@Override
public void start(){
String s,uno,des = null;
try {
Process p = Runtime.getRuntime().exec("ipconfig/all");
BufferedReader stdInput = new BufferedReader(new InputStreamReader(p.getInputStream()));
File outputFile = new File("/home/elie-m/NetBeansProjects/CMMAC/web/output.txt");
FileWriter outt= new FileWriter(outputFile);
System.out.println("MAC ADDRESS:\n");
while ((s = stdInput.readLine()) != null) {
Scanner par = new Scanner(s).useDelimiter(" Link encap:Ethernet HWaddr ");
if(s.startsWith("eth0"))
{
while(par.hasNext()){
uno=par.next();
des=par.next();
outt.write(des);
}
par.close();
}
}
System.exit(0);
}
catch (IOException e) {
System.out.println("exception happened - here's what I know: ");
e.printStackTrace();
System.exit(-1);
}
}
@Override
public void stop() {}
}
当我启动jsp页面时,我收到此错误:
Reading certificates from 1580 http://localhost:8080/CMMAC/localfile.jar|/home/elie-m/.java/deployment/cache/6.0/18/57db752-3f3326e8.idx
java.lang.NoClassDefFoundError: localfile (wrong name: locf/localfile) at
java.lang.ClassLoader.defineClass1(Native Method) at
java.lang.ClassLoader.defineClass(ClassLoader.java:621) at
java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124) at
java.net.URLClassLoader.defineClass(URLClassLoader.java:260) at
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at
java.lang.reflect.Method.invoke(Method.java:597) at
sun.plugin2.applet.Plugin2ClassLoader.defineClassHelper(Plugin2ClassLoader.java:694)
at
sun.plugin2.applet.Plugin2ClassLoader.access$400(Plugin2ClassLoader.java:63) at
sun.plugin2.applet.Plugin2ClassLoader$2.run(Plugin2ClassLoader.java:671) at
java.security.AccessController.doPrivileged(Native Method) at
sun.plugin2.applet.Plugin2ClassLoader.findClassHelper(Plugin2ClassLoader.java:633) at
sun.plugin2.applet.Applet2ClassLoader.findClass(Applet2ClassLoader.java:100) at
java.lang.ClassLoader.loadClass(ClassLoader.java:307) at
java.lang.ClassLoader.loadClass(ClassLoader.java:252) at
sun.plugin2.applet.Plugin2ClassLoader.loadCode(Plugin2ClassLoader.java:433) at
sun.plugin2.applet.Plugin2Manager.createApplet(Plugin2Manager.java:2880) at
sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Plugin2Manager.java:1397) at
java.lang.Thread.run(Thread.java:619)
Exception:java.lang.NoClassDefFoundError: localfile (wrong name: locf/localfile)
我接受使用小程序的权限问题后发生此错误。
我不知道将.jar和.class文件放在何处,以便客户端可以读取使用applet,我甚至无法绕过错误进行2周的搜索。如果需要,我可以在项目中给出整个目录文件夹/文件结构。只要问你需要什么,我就会把它贴在这里。
jar被签名并且编译了类,但它似乎无法找到我需要运行的applet类。我将jar和类文件放入WEB-INF / classes / locf /和build / web /文件夹中。我也将它们放在另一个web文件夹中,与build相同的目录中的文件夹。
操作系统是linux ubuntu 9.10。
答案 0 :(得分:2)
我从来没有从JSP运行applet,但我看到你的Applet
位于名为locf
的包中。错误java.lang.NoClassDefFoundError: localfile (wrong name: locf/localfile)
表明JAR应该反映该目录结构。参考tutorial,我期待这样的事情:
<applet
code="locf.localfile"
archive="localfile.jar"
width="150" height="150">
</applet>
查看jar tf localfile.jar
的结果可能会有所帮助。
此外,类名通常使用CamelCase,例如LocalFile
。
答案 1 :(得分:1)
您必须将jar放在您使用archive param指定的路径中。或者更改存档参数以匹配您托管applet jar的位置。
从上面的代码中,applet jar应该位于Web根目录上。它不错,如果它不在那里你只需要调整你的参数指向罐子。
如果要将存档保留为localfile.jar,可以使用codebase参数指定目录路径。
这是一个例子。
您的JSP位于此处
<WebRoot>//myJspFolder/myjsp.jsp
你的罐子就在这里
<WebRoot>//myAppletFolder/localfile.jar
您的applet参数将是
<param name="code" value="locf.localfile.class" />
<param name="codebase" value="/myAppletFolder/" />
<param name="archive" value="localfile.jar">
或者不使用代码库参数
<param name="code" value="locf.localfile.class" />
<param name="archive" value="/myAppletFolder/localfile.jar">
如果您加载多个jar,代码库参数很有用。您可以使用代码库为每个jar提供路径的公共部分。我可举一个例子,但我不想创造混乱。