10

我正在从一个大型预先存在的项目 (Vizster) 创建一个 Java 小程序。我在 Mac OS X 上使用 NetBeans 6.7.1 和 JDK 1.5。

我正在尝试从它的单个输出 .jar 文件运行小程序,但是当我这样做时,它在 Firefox 的屏幕底部显示“已加载小程序”,并且 Java 控制台中没有任何内容,但没有显示在小程序的窗口。在此之前,我在 Firefox 中遇到过不同的错误,包括诸如“appletNotLoaded:ClassDefNotFoundError”之类的错误以及安全错误,但我的 java 控制台中从来没有任何输出。这是小程序的 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);
    }
 }

该小程序作为独立的(未嵌入在 html 中)运行得非常好,但我需要嵌入它。“Vizster”对象是 JFrame 的扩展,所以我想我应该能够创建它的一个实例并将它添加到一个小程序中。可能比这复杂得多吗?

不幸的是,我通常是 Java 和小程序的新手。我已经看到很多关于源树结构的论坛帖子是一个问题,所以:

1)我使用多个包是否有问题?它们都在我项目的 src 目录中。

2)我需要在我的java主目录中放置什么吗?我知道很多人都有类路径问题,但我使用的是现代 IDE,我认为它已经为我解决了所有这些问题。

3) 将我的项目导入 NetBeans Java Web 应用程序项目时,我应该将小程序作为 .jar 添加到项目中,还是应该添加整个项目?

4)最初当我创建这个小程序时,我只有几个源文件和一堆 .jar 库作为依赖项,但是当我检查输出 .jar 时,我看到的只是编译后的源文件。图书馆中的文件没有任何痕迹。这是应该的吗?我注意到,如果我将输出 .jar 从其包含的文件夹中移出,它就不能再独立运行了。我认为 .jars 应该是自包含的,这不是真的吗?关于制作可执行jar ,我应该知道什么吗?

5)附带说明,在 html 中的小程序标签中表示的小程序的大小是否必须与小程序本身的大小完全匹配?

很抱歉这个巨大的帖子和令人难以置信的模糊问题,我正在与一个没有人对 applet 或 Java 一无所知的团队工作(我知道我们真的很聪明)。任何形式的帮助或一般性建议都会有帮助。

谢谢!

4

1 回答 1

15

您可以在存档属性中指定多个 jar:

<applet codebase ="." code="zuve.ZuveApplet.class"
        archive="ZuveApplet.jar,thing.jar,anotherThing.jar"
        height="1000" width="1000"/>

JFrame 是一个顶级容器,因此您无法将它添加到您的小程序中。你可以让你的小程序创建你的对象的一个​​实例并让它打开它自己的窗口。一种更灵活的方法是将您的对象重构为 JPanel。作为 JPanel,它可以添加到 JApplet 中,如果您还希望支持将其作为应用程序运行,则可以添加到 JFrame 中。

还可以看看JNLP,因为它允许您将代码部署为小程序或应用程序,并且还提供用于打印和本地文件访问的API 。简单的小程序无法使用的功能。

于 2010-05-13T21:57:00.380 回答