访问器方法在 Windows、Linux 下可见,但在 OS X 下不可见

发布于 2024-11-10 06:54:52 字数 1277 浏览 3 评论 0原文

尝试使用 1.5.2 jar 文件(在 Java.net http://例如 /java3d.java.net/binary-builds.html)。

尝试拨打电话,例如 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 文件的情况下使这些源可移植。

Trying to build against javax.vecmath using the 1.5.2 jar file (found on Java.net http://java3d.java.net/binary-builds.html, for example).

Try to make a call on, say 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());
  }
}

In 64 bit Windows and Linux (I've only tried Ubuntu 10.04, 64 bit), this compiles and runs.

In OS X (10.6.7) it will not compile:

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

This is using the exact same physical vecmath.jar

If instead I use the source directly, it compiles on OS X, but does not run

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

If I compile the sources myself on OS X to a jar file, and then use the jar in the example above, again, unable to compile.

Now, the fields being accessed are in javax.vecmath.Tuple3d, which is an abstract class with public fields for x, y and z. So on OS X this will work (actually, it seems to work everywhere).

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

The thing is, I'm working on a code base that depends on vecmath.jar, and in which the maintainers are on Windows and wish to keep using the accessor methods, but I'm on OS X.

I'm looking to both:

(1) understand what is going on
(2) figure out how to make these sources portable while depending on the vecmath.jar file.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

萌化 2024-11-17 06:54:52

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

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

August,InteractiveMesh 。

The "Exception in thread "main" java.lang.NoSuchMethodError: javax.vecmath.Point3d.getX()" indicates that not the 1.5.2 version but the Apple version 1.3 of vecmath.jar is accessed. The *getter" and "setter" methods were introduced in 1.5.

Check if Apple's out-dated Java 3D version 1.3 is installed in System/Library/Java/Extensions/ on your Mac. Remove all Java 3D 1.3 related files including vecmath.jar (jar, jnilib), they are useless.

August, InteractiveMesh

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文