我尝试使用applet从浏览器打开记事本。是的,我知道这对安全性来说很糟糕,但它是一个概念证明。我原本试图在APEX中使用javascript来做到这一点,但无济于事。无论如何,这是我的小程序:
package opennote;
import java.applet.*;
import java.net.*;
public final class OpenNote extends Applet{
public static void init(String[] args){
try{
ProcessBuilder derp = new ProcessBuilder("Notepad.exe","myfile.txt");
derp.start();
}
catch(Exception e){
System.out.println("Stuff didn't work);
}
}
}
我的HTML是
<html>
<title>This applet opens the notepad</title>
<hr>
<applet code=OpenNote.class width="320" height="120">
If my browser is Java-enabled, I will open the notepad.
</applet>
<hr>
<html>
当我将applet作为一个应用程序时,它起作用了,但这并不是很多。当我打开HTML时,它会显示&#34;如果我的浏览器...&#34;在我允许安全性运行java applet之前的消息。然后javascript加载,消息消失,它给我一个应用程序错误。错误是&#34; NoClassDefFoundError&#34;,唯一的信息是&#34; OpenNote(错误的名称:opennote / OpenNote) 类文件保存在与HTML相同的目录中。
谁能看到我做错了什么?当然,除了安全风险之外。
编辑: 我放弃了记事本的概念证明。这似乎是一个挂断。所以这是我的新问题。我只是有一个应用程序。它写一个输出。这是一个错误。
package ex;
import java.applet.*;
import java.net.*;
public final class EX extends Applet{
public static void main(String[] args){
System.out.println("Here be monsters");
}
}
我的HTML是
<html>
<title>This applet writes stuff</title>
<hr>
<applet code="Ex.class" width="320" height="120">
If my browser is Java-enabled, I will write stuff
</applet>
<hr>
<html>
当我把它放入时我得到了错误
NoClassDefFoundError的
Ex(错误的名字:ex / Ex)
然后我更改了代码&#39; javascript中的属性为&#34; ex.Ex.class&#34;我收到以下代码:
ClassNotFoundException的
ex.Ex.class
该怎么做?
答案 0 :(得分:1)
您需要在html中正确指定您的班级。 像
<applet code="opennote.OpenNote.class" width="320" height="120">
OR
<applet code="opennote\OpenNote.class" width="320" height="120">
这是因为您的代码在opennote包中。
答案 1 :(得分:1)
类文件保存在与HTML相同的目录中。
那是错误的地方。
opennote
'子目录中。opennote
目录中,该目录(给定无代码库)本身需要与HTML位于同一目录中。 顺便说一句:
File
Desktop.getDesktop().open(File)
的更安全的跨平台方式
body
元素。使用validation service检查HTML。