java.lang.NoSuchMethodError:getPointer

java.lang.NoSuchMethodError:getPointer,java,opengl,jar,lwjgl,slick2d,Java,Opengl,Jar,Lwjgl,Slick2d,我在IDE中运行的程序很好,但是在IDE的jar文件中,一旦我将其导出为可运行的jar文件(并使其成为胖jar,添加库和本机等),就会出现以下错误: Exception in thread "main" java.lang.NoSuchMethodError: getPointer at java.lang.ClassLoader$NativeLibrary.load(Native Method) at java.lang.ClassLoader.loadLibrary1(Cla

我在IDE中运行的程序很好,但是在IDE的jar文件中,一旦我将其导出为可运行的jar文件(并使其成为胖jar,添加库和本机等),就会出现以下错误:

Exception in thread "main" java.lang.NoSuchMethodError: getPointer
    at java.lang.ClassLoader$NativeLibrary.load(Native Method)
    at java.lang.ClassLoader.loadLibrary1(ClassLoader.java:1939)
    at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1864)
    at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1854)
    at java.lang.Runtime.loadLibrary0(Runtime.java:845)
    at java.lang.System.loadLibrary(System.java:1084)
    at org.lwjgl.Sys$1.run(Sys.java:72)
    at java.security.AccessController.doPrivileged(Native Method)
    at org.lwjgl.Sys.doLoadLibrary(Sys.java:65)
    at org.lwjgl.Sys.loadLibrary(Sys.java:81)
    at org.lwjgl.Sys.<clinit>(Sys.java:98)
    at org.lwjgl.opengl.Display.<clinit>(Display.java:128)
    at Joehot200.TerrainDemo.setUpDisplay(TerrainDemo.java:1956)
    at Joehot200.TerrainDemo.startGame(TerrainDemo.java:2029)
    at Joehot200.Main.main(Main.java:55)
线程“main”java.lang.NoSuchMethodError:getPointer中出现异常 位于java.lang.ClassLoader$NativeLibrary.load(本机方法) 位于java.lang.ClassLoader.loadLibrary1(ClassLoader.java:1939) 位于java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1864) 位于java.lang.ClassLoader.loadLibrary(ClassLoader.java:1854) 位于java.lang.Runtime.loadLibrary0(Runtime.java:845) 位于java.lang.System.loadLibrary(System.java:1084) 位于org.lwjgl.Sys$1.run(Sys.java:72) 位于java.security.AccessController.doPrivileged(本机方法) 位于org.lwjgl.Sys.doLoadLibrary(Sys.java:65) 位于org.lwjgl.Sys.loadLibrary(Sys.java:81) 位于org.lwjgl.Sys(Sys.java:98) 在org.lwjgl.opengl.Display上(Display.java:128) 位于Joehot200.TerrainDemo.setUpDisplay(TerrainDemo.java:1956) 位于Joehot200.TerrainDemo.startGame(TerrainDemo.java:2029) 在Joehot200.Main.Main(Main.java:55) 我的设置显示方法是:

private static void setUpDisplay() {
    try {
        DisplayMode displayMode = null;
        DisplayMode[] modes = Display.getAvailableDisplayModes(); //this is line 1956

         for (int i = 0; i < modes.length; i++)
         {
             if (modes[i].isFullscreenCapable())
               {
                    displayMode = modes[i];
               }
         }
         if (displayMode == null){
             displayMode = new DisplayMode(100, 100);
         }
        //Display.setDisplayMode(new DisplayMode(WINDOW_DIMENSIONS[0], WINDOW_DIMENSIONS[1]));
         Display.setDisplayMode(displayMode);
        Display.setResizable(true);
        Display.setTitle("Pirate game");
        //Display.setFullscreen(true);
        Display.create();

    } catch (LWJGLException e) {
        e.printStackTrace();
        cleanUp(true);
    }
}
private static void setUpDisplay(){
试一试{
DisplayMode DisplayMode=null;
DisplayMode[]modes=Display.getAvailableDisplayModes();//这是第1956行
对于(int i=0;i

如何修复这个愚蠢的错误并使其正常工作?

您很可能错过了本机库。您可以按如下方式设置路径:

System.setProperty("org.lwjgl.librarypath", new File("pathToNatives").getAbsolutePath());
        switch(LWJGLUtil.getPlatform())
        {
            case LWJGLUtil.PLATFORM_WINDOWS:
            {
                JGLLib = new File("./native/windows/");
            }
            break;

            case LWJGLUtil.PLATFORM_LINUX:
            {
                JGLLib = new File("./native/linux/");
            }
            break;

            case LWJGLUtil.PLATFORM_MACOSX:
            {
                JGLLib = new File("./native/macosx/");
            }
            break;
        }

        System.setProperty("org.lwjgl.librarypath", JGLLib.getAbsolutePath());

如果使用LWJGL附带的文件夹结构,则必须选择正确的本地人,如下所示:

System.setProperty("org.lwjgl.librarypath", new File("pathToNatives").getAbsolutePath());
        switch(LWJGLUtil.getPlatform())
        {
            case LWJGLUtil.PLATFORM_WINDOWS:
            {
                JGLLib = new File("./native/windows/");
            }
            break;

            case LWJGLUtil.PLATFORM_LINUX:
            {
                JGLLib = new File("./native/linux/");
            }
            break;

            case LWJGLUtil.PLATFORM_MACOSX:
            {
                JGLLib = new File("./native/macosx/");
            }
            break;
        }

        System.setProperty("org.lwjgl.librarypath", JGLLib.getAbsolutePath());
最后:您正在使用Slick2D,因此这可能会引起兴趣():

我查看了错误,认为它一定与其中一个文件比另一个文件旧有关,然后我意识到我使用的是slick附带的lwjgl jar。我把它换成了网站上的那个,它解决了我的问题


您的ide路径上似乎有一个.jar,该文件现在已丢失。由于lwjgl使用本机库(即
.dll
等),问题可能是您的fat jar找不到这些库。因此,您可能需要在lwjgl可以找到的位置提供这些库。@Thomas我已将所有本地人都包含在IDE的同一文件夹中。@Stultuske我仔细检查,IDE和游戏都有Slick库,lwjgl,同一个本地人文件夹,lwjgl_Util和Vecmath。不起作用。除了我将您的代码行(将“pathToNatives”更改为natives文件夹路径)置于“try{声明。感谢您的编辑,这对我将来会很有用…所以请向您投票-但是,这仍然不能解决原始问题:/。您的LWJGL JAR和本地版本匹配吗?谢谢!我使用了LWJGL_util和slick的不同版本!这导致它崩溃!非常感谢您的修复!:)