7

尝试使用 1.5.2 jar 文件(例如在 Java.net http://java3d.java.net/binary-builds.html上找到)针对 javax.vecmath 进行构建。

尝试拨打电话,比如说 Point3d;

public class Foo {
  public static void main(String[] args) {
    Point3d t = new Point3d(1.0, 1.0, 1.0);
    System.out.println(t.getX());
  }
}

在 64 位 Windows 和 Linux(我只尝试过 Ubuntu 10.04,64 位)中,它可以编译并运行。

在 OS X (10.6.7) 中它不会编译:

...: cannot find symbol
  symbol  : method getX()
    location: class javax.vecmath.Point3d
    System.out.println (t.getX());

这是使用完全相同的物理 vecmath.jar

如果我直接使用源代码,它会在 OS X 上编译,但不会运行

Exception in thread "main" java.lang.NoSuchMethodError: javax.vecmath.Point3d.getX()D

如果我自己在 OS X 上将源代码编译为 jar 文件,然后使用上面示例中的 jar,再次无法编译。

现在,正在访问的字段位于 javax.vecmath.Tuple3d 中,这是一个抽象类,具有 x、y 和 z 的公共字段。所以在 OS X 上这将起作用(实际上,它似乎在任何地方都有效)。

public class Foo {
  public static void main(String[] args) {
    Point3d t = new Point3d(1.0, 1.0, 1.0);
    System.out.println(t.x);
  }
}

问题是,我正在开发一个依赖于 vecmath.jar 的代码库,其中维护人员在 Windows 上并希望继续使用访问器方法,但我在 OS X 上。

我正在寻找两者:

(1) 了解发生了什么 (2) 在依赖 vecmath.jar 文件的同时弄清楚如何使这些源可移植。

4

1 回答 1

6

“线程“main”java.lang.NoSuchMethodError: javax.vecmath.Point3d.getX()中的异常”表示访问的不是1.5.2版本而是Apple 1.3版本的vecmath.jar。*getter" 和 "setter" 方法是在 1.5 中引入的。

检查 Apple 过时的 Java 3D 版本 1.3 是否安装在 Mac 上的 System/Library/Java/Extensions/ 中。删除所有与 Java 3D 1.3 相关的文件,包括 vecmath.jar (jar, jnilib),它们没用。

八月,InteractiveMesh

于 2011-05-28T07:41:56.767 回答