概括
Java 环境变量设置正确,从 echo-ing 中可以看出。但是,只有在 javac 命令中显式包含 jar 时才能看到 jar。
细节
这与图形和 OpenGL 无关,某些问题与类路径有关,即第三方jar文件的导入。
使用 Windows XP SP3、JDK 1.7.0_13
在 Windows xp 上,系统环境变量 PATH/JAVA_HOME/CLASSPATH 已设置/添加到包括以下目录:
C:\Documents and Settings\Administrator\My Documents\project\jar;
C:\Java\jdk1.7.0_13;
C:\Java\jdk1.7.0_13\bin;
C:\Java\jdk1.7.0_13\lib;
没有可能发生冲突的用户定义变量。来自终端的保证(我在更改环境变量以便更新后重新启动,以在 windows xp 中设置环境变量,请参阅Java 安装的环境变量):
>echo %classpath%
C:\Documents and Settings\Administrator\My Documents\project\jar;C:\Java\jdk1.7.0_13;C:\Java\jdk1.7.0_13\bin;C:\Java\jdk1.7.0_13\lib;
>echo %java_home%
C:\Documents and Settings\Administrator\My Documents\project\jar;C:\Java\jdk1.7.0_13;C:\Java\jdk1.7.0_13\bin;C:\Java\jdk1.7.0_13\lib;
>echo %path%
C:\WINDOWS\System32;... ...C:\Java\jdk1.7.0_13;C:\Java\jdk1.7.0_13\bin;C:\Java\jdk1.7.0_13\lib;C:\Documents and Settings\Administrator\My Documents\project\jar;
矫枉过正,是的...当它起作用时,我会适当地修剪它们
相关文件:
C:\Documents and Settings\Administrator\My Documents\project\jar\jogl-all.jar
C:\Documents and Settings\Administrator\My Documents\project\Mush.java
C:\Documents and Settings\Administrator\My Documents\project\JarDir.java
jogl-all.jar包含“javax.media.opengl.GL2”,Mush.java是一个通过导入 java-OpenGL 库显示简单 3D 蘑菇的程序;具体来说,它导入“javax.media.opengl.GL2”。
JarDir.java是我在http://www.java2s.com/Code/Java/File-Input-Output/Listfilesinajarfile.htm找到的一个程序,它显示了 jar 中的类,我用它来证明 jar 内容. 它还表明可以在机器上进行编译。
JarDir.java 如下:
import java.io.*;
import java.util.*;
import java.util.jar.*;
public class JarDir {
public static void main (String args[])
throws IOException {
JarFile jarFile = new JarFile("C:\\Documents and Settings\\Administrator\\My Documents\\project\\jar\\jogl-all.jar");
Enumeration enumy = jarFile.entries();
while (enumy.hasMoreElements()) {
process(enumy.nextElement());
}
}
private static void process(Object obj) {
JarEntry entry = (JarEntry)obj;
String name = entry.getName();
long size = entry.getSize();
long compressedSize = entry.getCompressedSize();
System.out.println(
name + "\t" + size + "\t" + compressedSize);
}
}
并给出输出:
>javac JarDir.java
>java JarDir
... (lots of stuff)
javax/media/opengl/GL2.class 94123 28513
... (lots of stuff)
它演示了成功的编译和 jar 文件中类的存在。尝试运行Mush.java会出现许多错误,尤其是第一个错误:
>javac Mush.java
Mush.java:21: error: package javax.media.opengl does not exist:
import javax.media.opengl.GL2;
^
为了确定这是否是类路径问题,我运行了:
>javac Mush.java -cp ./jar/jogl-all.jar
由于缺少相关类(例如由Mush.java实例化并位于同一项目文件夹中的 MushScene.java )而导致错误,但在查找 javax.media.opengl 时没有问题!所以问题一定是环境变量问题!
这意味着,尽管根据 echo %classpath% 正确设置了类路径,但 java 不同意。我做错了什么?
注意:Mush.java程序已经在 Linux 上进行了演示。
注意 2:我有多个 jar,如果我最终在 jar 文件夹中使用 N 个 jar,我希望能够包含该文件夹,而不是专门命名每个 jar =)