我正在制作一个简单的窗口,使用Java OpenGL库(jogamp)最新的稳定版本2.2.4渲染一个移动的三角形,我已经设置好了一切,就像我在JOGL网站上找到的教程一样,问题是当在Netbeans上运行这段代码时,它运行得很好,GetDefault()方法可以获得我的系统OpenGL版本,窗口渲染和动画。问题是,当我构建项目时,我确保所有的Jar和.dll文件都在/dist文件夹中,并使用"java-Jar-name.Jar"执行Jar。我得到以下错误消息:
Exception in thread "main" javax.media.opengl.GLException: Profile GL_DEFAULT is not
available on null, but: []
at javax.media.opengl.GLProfile.get(GLProfile.java:962)
at javax.media.opengl.GLProfile.getDefault(GLProfile.java:693)
at javax.media.opengl.GLProfile.getDefault(GLProfile.java:704)
at cl.lucas.clases.Main.main(Main.java:14)
这是我的主类代码:
import com.jogamp.opengl.util.FPSAnimator;
import java.awt.Frame;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.media.opengl.GLCapabilities;
import javax.media.opengl.GLProfile;
import javax.media.opengl.awt.GLCanvas;
public class Main {
public static void main(String[] args) {
GLProfile glp = GLProfile.getDefault();
GLCapabilities caps = new GLCapabilities(glp);
GLCanvas canvas = new GLCanvas(caps);
Frame frame = new Frame("AWT Window Test");
frame.setSize(300, 300);
frame.add(canvas);
frame.setVisible(true);
frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
canvas.addGLEventListener(new EscenaSimple());
FPSAnimator animator = new FPSAnimator(canvas, 60);
animator.start();
}
}
为什么它只能在IDE上工作而不能在外部工作,我运行的是Windows7,我也试过在Eclipse上运行这个程序,没有问题,问题是jar可执行文件,也许我错过了什么。
您的胖JAR可能是不完整的,我的JAR在GNULinux、OSX和Windows下可以完美工作。您必须遵循这个布局,您可以在Eclipse中使用这个Ant脚本使其工作。我的详细说明在这里,即使你只使用JogAmp而没有我的教程中提到的引擎,它们也能工作。
许多开发人员已经问了我们很多关于胖JAR的问题,请在我们的官方论坛上联系我们。您不需要将本机库(Windows下的DLL)放在特定目录中,只有当您不使用包含本机库的JAR时,才有必要设置Java库路径,只需启用自动本机库加载(默认情况下处于启用状态),GlueGen将检测您的体系结构,提取适当的本机库,(用于JOGL、JOAL和JOCL)并加载它们。
如果您真的想使用"-jar"选项,那么您的jar必须包含应用程序运行所需的全部内容,并且位于预期位置。仔细阅读我教程中的段落,您必须至少设置manifest属性"Main Class"才能使其正常工作,这样Java才能找到应用程序的主要入口点。