【问题标题】:How do I package up an applet with multiple .jar libraries?如何用多个 .jar 库打包一个小程序?
【发布时间】:2011-02-19 05:44:47
【问题描述】:

我正在从一个大型预先存在的项目 (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 和 applet 的新手。我已经看到很多关于源树结构是一个问题的论坛帖子,所以:

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

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

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

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

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

很抱歉,这篇文章很庞大,而且问题非常模糊,我正在与一个没有人对 applet 或 Java 一无所知的团队合作(我知道我们真的很聪明)。任何形式的帮助或一般性建议都会很有帮助。

谢谢!

【问题讨论】:

    标签: java jar applet executable-jar


    【解决方案1】:

    你可以在归档属性中指定多个jar:

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

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

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

    【讨论】:

    • 哇!感谢您的快速回复,内容非常丰富。
    猜你喜欢
    • 1970-01-01
    • 2013-12-07
    • 2013-08-02
    • 1970-01-01
    • 2023-03-27
    • 2019-05-12
    • 1970-01-01
    • 1970-01-01
    • 2014-03-05
    相关资源
    最近更新 更多