0

序言:所以这一切都始于尝试使用javax.vecmath.Vector2d. 我没有,javax.vecmath所以我花了一些时间尝试获取它,发现我需要下载 Java3D。

在尝试下载 Java3D for Java(版本 16.0.2)很长时间后,我最终将它与 vecmath.jar 文件一起登陆/Library/Java/JavaVirtualMachines/jdk-16.0.2.jdk/Contents/Home/lib/ext. 这摆脱了error: package javax.vecmath does not exist错误消息。

然后,我收到了消息

<JAVA_HOME>/lib/ext exists, extensions mechanism no longer supported; Use -classpath instead.
.Error: Could not create the Java Virtual Machine.

这也不允许我在 shell 中使用任何 java 命令。

经过一番研究,我得出结论,解决方案是移动(通过 Finder 选择并拖动)j3dutils.jar,,vecmath.jar然后j3dcore.jar移至lib并删除lib/ext目录。我已经摆脱了这个<JAVA_HOME>/lib/ext exists问题,但又回到了error: package javax.vecmath does not exist.

我什至不知道该做什么知道。我只想使用 javax.vecmath。我会以完全错误的方式解决这个问题吗?我怎样才能让它工作?

4

2 回答 2

0

好吧,我想通了。

如何javax.vecmath在 Mac OS(11.5.1) 和 Java(16.0.2)中使用

我给出的描述包括我为什么做这些事情,如果你只是想要一个答案,请跳到底部的 TLDR。

第 1 步:下载最新版本的Java3D

这包含vecmath,以及j3dcorej3dutils。它将下载一个 .zip 文件。解压缩文件,它会展开到一个新目录中,其中包含另一个 .zip 文件j3d-jre.zip。解压缩j3d-jre.zip,它会展开成一个目录库。在 lib 内部将是一个子目录 ext,其中包含三个 .jar 文件:j3dcore.jarj3dutils.jarvecmath.jar. 你可以把它们放在任何地方,只要确保你跟踪它们的位置(我把它们放在~/Library/Java/Extensions,这个位置在硬盘上,需要管理员密码才能做任何事情——使用

sudo unzip /path/to/j3d-jre.zip

如果你在 shell 中做事)。您可以将ext目录放入,JAVA_HOME/lib/但在 Java 6 之后,这将导致问题。

第 2 步:改变CLASSPATH

Java 不知道如何查找vecmath.jar,因此您必须指定它。

选项 1:CLASSPATH使用每个 shell 命令指定

最简单的版本是使用

javac -cp ".:/path/to/vecmath.jar:" MyMainProgram.java

编译和

java -cp ".:/path/to/vecmath.jar:" MyMainProgram

运行程序(你也可以替换-cp-classpath它会做同样的事情)

此选项永远不会破坏您的CLASSPATH,但您-cp每次编译和运行导入javax.vecmath.

选项 2:CLASSPATH在每个新的终端窗口中指定

比 更持久一点-cp,您可以定义CLASSPATH使任何更改仅发生在该终端窗口中。使用此表格:

export CLASSPATH=".:/path/to/vecmath.jar:"

现在当你打电话

javac MyMainProgram.java
java MyMainProgram

Java 将看到这CLASSPATH一点.:/path/to/vecmath.jar,并且所有内容都将编译和运行而无需添加-cp命令。

此选项的主要缺点是,如果您CLASSPATH再次更新,您必须记住添加以前的CLASSPATH(您可以随时查看echo $CLASSPATH

选项 3:永久添加CLASSPATH到终端

在终端中输入以下内容:

open ~/.bash_profile

这将打开一个窗口,其中可能有也可能没有代码。无论任何预先存在的代码,滚动到底部并添加

export CLASSPATH=".:/path/to/vecmath.jar:"

此选项将永久保留CLASSPATH在所有终端窗口中,或者直到您更改它(使用上述任何方法)。

TLDR

  1. 下载适用于 macOS 的Java3D

  2. 解压java3d-1_5_1-macosx.zip并打开它创建的目录

  3. 解压j3d-jre.zip并打开新目录/lib/和子目录/lib/ext/

  4. vecmath.jarj3dcore.jar和移动j3dmath.jar~/Library/Java/Extensions(这需要管理员密码)或任何其他位置

  5. 在终端中运行以下行:

    open ~/.bash_profile

  6. 转到底部并添加以下内容:

    export CLASSPATH="/path/to/vecmath.jar:$CLASSPATH"

  7. 导入javax.vecmath.*到您想要的任何 .java 程序

于 2021-08-27T01:15:37.087 回答
0

jar 文件可以放在你想去的地方,把它移到你项目的 lib 文件夹是很好的。真正的问题是你需要你的类路径指向它。

是一个完整的解释。

如果您从命令行运行,则不需要设置类路径变量,您可以在 java 命令中提供它。它会是这样的:

java -cp lib/vecmath.jar Example

这假定您正在处理的程序已被编译到名为 Example.class 的类文件中。如果你的 main 方法在一个包中,你需要完全限定类名,所以它可能看起来像:

java -cp lib/vecmath.jar com.demo.Example

您可以在类路径中列出多个 jar 文件,用冒号 (:) 分隔。

您还可以通过调用以下命令在命令行中寻求帮助:

java -h
于 2021-08-27T00:56:56.327 回答