3

在我看来,我想要实现的目标非常简单,但却变得非常痛苦。

我有 ProjectA,它是一个 BlackBerry 应用程序项目。我有 ProjectB,它是一个 Java 库项目。我想从 ProjectA 中引用 ProjectB。我可以添加参考,但是当我运行 ProjectA 时,它不起作用。我有这两个项目的源代码,并且都是使用 Java 编译器 1.4 编译的

我尝试了多种方法,但由于某种原因一切都失败了:

1. ProjectB 上的 pre-verify.exe 它失败并显示错误“JAR 文件创建失败并出现错误 -1” 我可以看到 cod 和 jar 文件已创建,但是当将 jar 文件添加到 ProjectA 并运行它时,它没有不行。不确定我是否需要添加 .cod 文件。

2. 创建新的 BlackBerry Library Project 并在 ProjectA 中引用它 我创建了一个新项目 ProjectC,然后将 ProjectB 的 jar 添加到其中。然后我在 ProjectA 中添加对 ProjectC 的引用。但我不能从 ProjectB 导入类

请提出一条出路。我正在使用 Eclipse 插件并依赖 Eclipse 的构建功能

4

2 回答 2

7

自己想出答案。在这里发布以防有人偶然发现。以下是步骤:

  1. 创建您的库并导出为 JAR(或下载第 3 方 JAR)
  2. 在 JAR 上运行 preverify.exe

    preverify.exe -verbose -classpath "C:/Program Files/Research In Motion/BlackBerry JDE 5.0.0/lib/net_rim_api.jar" jarname.jar

  3. 如果你很幸运,你不会遇到任何问题,你会完成的。但我不够幸运。我收到以下错误

错误:没有这样的文件或目录。JAR 文件创建失败,错误 -1

这有两个可能的原因:

  • jar.exe 未添加到您的 PATH 中。如果是这样,请将它(在您的 JAVA 安装目录中找到)添加到 PATH
  • jar.exe 上的 cvfm 或 -cfm 选项无法执行。我不知道原因,但解决此问题的方法是使用 -cf 选项,指向 .class 文件但不要使用清单文件。这是一个
    例子:

    "C:\Program Files\Java\jdk1.6.0_26\bin\jar.exe" -cf "output\json-1.0.jar" tmp12996/

tmp12996 包含预先验证的 .class 文件。除了我上面列出的问题之外,您可能会遇到不同的问题。

  1. 从上述步骤创建 jar 后,请确保其结构符合您的预期。一种检查方法是将 .jar 重命名为 .zip,解压缩然后检查。如果不是您需要的,您可以更改结构然后重新打包(不过我不会做任何重大更改)

  2. 然后将这个新构建的 jar 添加到您的 BlackBerry 应用程序作为参考,即添加到 Eclipse 中的 Java Build Path 并在 Order and Export 窗口中检查它。

  3. 就是这样!你已准备好出发!运行你的应用程序!

当您尝试在模拟器中运行时,您可能会遇到指示模块包含验证错误的错误。此问题的一个可能原因是您的库(原始 JAR)包含与 J2ME 或 BB JRE 不兼容的 API。当您独立构建库时,您可能不会收到编译器错误,因为它是针对 Java 1.4(或任何您的版本)编译的。解决问题的最佳方法是将所有代码移到 BB App 项目中,然后构建它。这会提前告诉你所有的问题。您根据需要进行更改,然后将代码移回库。如果您没有正在使用的库(如 3rd 方库)的源代码,那么您可能不走运!还要记住,除了我遇到并解决的问题之外,可能还有其他问题。

我正在详细记录这一点,因为我花了很长时间才弄清楚这一切;至少可以说,是最令人沮丧的!

于 2012-02-02T10:53:42.783 回答
1

我找到了另一个解决方案。如果您在预验证 JAR 文件时遇到错误 -1,只需运行您的库应用程序一次。因为如果您不运行该应用程序,则可交付成果文件夹将为空。确保此文件夹不为空。

于 2012-06-01T06:22:55.590 回答