Метод доступа, видимый в Windows, Linux, но не в OS X

#java #java-3d

#java #java-3d

Вопрос:

Попытка сборки на основе javax.vecmath с использованием файла jar 1.5.2 (находится на 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 файл.

Ответ №1:

«Исключение в потоке «main» java.lang.Ошибка NoSuchMethodError: javax.vecmath.Point3d.getX()» указывает, что не версия 1.5.2, а версия Apple 1.3 для vecmath.jar доступен. Методы «getter» и «setter» были введены в версии 1.5.

Проверьте, не установлена ли устаревшая Java 3D версии 1.3 от Apple в System / Library / Java / Extensions / на вашем Mac. Удалите все файлы, связанные с Java 3D 1.3, включая vecmath.jar (jar, jnilib), они бесполезны.

Август, интерактивная сетка

Комментарии:

1. Это было именно так. Я искал в других местах блуждающий vecmath.jar файлы, но не этот. Спасибо.

2. Здесь та же проблема. Мне пришлось заменить vecmath.jar в System/Library/Java/Extensions , чтобы заставить его работать.