我正在从大规模预先存在的项目(Vizster)创建Java applet。我在Mac OS X上使用NetBeans 6.7.1和JDK 1.5。
我正在尝试从它的单输出.jar文件运行applet,但是当我这样做时,它在Firefox的屏幕底部显示“applet loaded”,并且java控制台中没有任何内容,但没有显示在小程序的窗口中。我之前在Firefox中遇到过不同的错误,包括“appletNotLoaded:ClassDefNotFoundError”等错误以及安全错误,但我的java控制台中从未有任何输出。这是applet的html文件:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<applet codebase ="." code="zuve.ZuveApplet.class"
archive="ZuveApplet.jar"
height="1000" width="1000"/>
</body>
</html>
其中zuve.ZuveApplet.class是我的main方法所在的位置,“ZuveApplet.jar”是输出jar文件的名称。这是ZuveApplet.java,主要方法类:
package zuve;
import vizster.Vizster;
import vizster.VizsterLib;
import java.applet.Applet;
public class ZuveApplet extends Applet {
public static final String DEFAULT_START_UID = "186297";
@Override
public void init() {
new Vizster();
}
public static void main(String[] argv) {
VizsterLib.setLookAndFeel();
//String startUID = argv.length > 0 ? argv[0] : DEFAULT_START_UID;
String startUID = DEFAULT_START_UID;
String file = argv.length > 0 ? argv[0] : null;
new Vizster(startUID, file);
}
}
applet作为一个独立的(非嵌入在html中)运行得非常好,但我需要嵌入它。 “Vizster”对象是JFrame的扩展,所以我想我应该能够创建它的一个实例并将其添加到applet中。可能比这复杂得多吗?
不幸的是,我对java和applet很新。我看过很多关于源树结构的论坛帖子都是个问题,所以:
1)我使用多个包是一个问题吗?它们都在我项目的src目录中。
2)我需要放在我的java主目录中吗?我知道很多人都有类路径问题,但我使用的是现代IDE,我认为这样可以解决所有这些问题。
3)将项目导入NetBeans Java Web应用程序项目时,我应该将applet作为.jar添加到项目中,还是应该添加整个项目?
4)最初当我创建这个applet时,我只有几个源文件和一堆.jar库作为依赖项,但是当我检查输出.jar时,我看到的只是编译后的源文件。没有来自库的文件的痕迹。这应该是怎么回事?我注意到,如果我将输出.jar从其包含的文件夹中移出,它就不能再独立运行了。我认为.jars应该是自包含的,这不是真的吗?关于制作可执行文件 jar,我应该知道什么?
5)在旁注中,html中applet标签中表示的applet的大小是否必须与applet本身的大小完全匹配?
很抱歉这个庞大的帖子,以及令人难以置信的模糊问题,我正在与一个团队合作,在这个团队中,没有人知道关于applet或Java的任何事情(我知道我们真正的辉煌)。任何形式的帮助或一般性建议都会有所帮助。
谢谢!
答案 0 :(得分:15)
您可以在存档属性中指定多个jar:
<applet codebase ="." code="zuve.ZuveApplet.class"
archive="ZuveApplet.jar,thing.jar,anotherThing.jar"
height="1000" width="1000"/>
JFrame是顶级容器,因此您无法将其添加到applet中。您可以让applet创建对象的实例,并让它打开自己的窗口。更灵活的方法是将对象重构为JPanel。作为JPanel,如果您还想支持将其作为应用程序运行,可以将其添加到JApplet或JFrame。
另请查看JNLP,因为它允许您将代码部署为applet或应用程序,并提供APIs以进行打印和本地文件访问。功能不适用于简单的小程序。