【问题标题】:Using local Jar from signed applet使用签名小程序中的本地 Jar
【发布时间】:2012-04-05 02:25:35
【问题描述】:

是否可以让 Applet 使用本地 jar?

我的 Applet 应用程序需要有一些依赖项(66Mb 的 jars)。用户之前可以安装这些 jar,但我如何从小程序中使用它们?

我可以将它们保存到默认位置 c:/myApp 和 /usr/local/myApp

我尝试加载它们:

ClassLoader loader = URLClassLoader.newInstance(
                    new URL[]{new URL("file://" + path + "/xuggle-xuggler-5.2.jar")},
                    JNLP2Manager.getCurrentManager().getAppletClassLoader()
            );

            Thread.currentThread().setContextClassLoader(loader);

但是 jar 不会自动添加到类路径中,我的意思是,我仍然需要单独加载每个类。

做以下工作:

 Class cls = loader.loadClass("com.xuggle.xuggler.video.ConverterFactory");
            String testString = ConverterFactory.XUGGLER_ARGB_32;

但是我可以将所有类都添加到小程序加载器吗?

附:我知道我不应该使用 Applet ,但 Applet 仍然最适合我的应用程序。

【问题讨论】:

  • +1 提出一个有趣的问题,并提前提到您想坚持使用小程序。该应用程序是什么。这使得小程序非常适合? (看来您将不得不跳过一些障碍才能使其正常工作 - 请参阅 AlexR 的第 1 点。)您是否知道使用 Java Web Start 部署的小程序可以延迟下载 Jars(仅在需要时)?
  • 这是一个非常严格的客户群,当它需要使用时,每个人都应该准备好立即开始,因为它是一个实时应用程序。我知道(1),但用户在实际使用该应用程序之前会有时间(安装)。所以,使 Applet 如此适合(我实际上开始使用 JWS)的一点是,该应用程序有多个选项卡,每个选项卡都是某种上下文。让用户在 Web 应用程序和本地应用程序之间切换,以便它可以选择当时他打算让小程序工作的上下文,这非常令人困惑。

标签: java applet signed-applet


【解决方案1】:

不,至少对于未签名的小程序来说,这是不可能的。 小程序类路径是相对于其代码库定义的,通常是从其中下载小程序的位置。

以下是可能的解决方法

  1. 对于已签名的小程序,您可以使用从本地 jar 读取类的自定义类加载器(使用 UrlClassLoader)。
  2. 对于未签名的小程序,您可以上传本地 jar 到服务器,然后从那里使用它。我认为这还不错:从用户的角度来看,他只是“帮助”应用程序找到自定义 jar 的位置。真正发生的是 jar 被上传到服务器,applet 从那里读取它。这种方式可以使用带有file 类型输入标签的常规HTML 表单来实现。使用 AJAX 可以向用户隐藏很多细节。

【讨论】:

  • 所以,我说的是一个签名的小程序。所以,UrlClassLoader 就是我想要的。谢谢。
  • 所以,事实证明 UrlClassLoader 没有将类放入小程序的类加载器中。加载时它不会出错,但在尝试使用它时却给我找不到类。
  • 您的代码有问题。您必须使用自定义类加载器加载类。像这样的东西:new URLClassLoader(new URL[] {new URL("file://c/custom.jar")}).loadClass("com.mycompany.MyClass").newInstance();
  • 顺便说一句,我是否应该一直回答问题并创建其他问题?如果是这样,我可以解决这个问题。无论如何,谢谢。
  • 问题是我试图满足一个有很多类的java库,我不能,至少不容易知道所有需要单独加载的类。
猜你喜欢
  • 2014-03-05
  • 2010-11-01
  • 2012-05-09
  • 1970-01-01
  • 2011-11-18
  • 1970-01-01
  • 2014-02-19
  • 1970-01-01
  • 2015-08-04
相关资源
最近更新 更多