在 LWJGL 3.1.4 中使用 stackPush() 时出现问题 - NoSuchMethodError
Trouble using stackPush() in LWJGL 3.1.4 - NoSuchMethodError
我一直在从事一个使用 LWJGL 的项目。我们在 3.1.3
版本中没有问题 运行 这一行
val stack: MemoryStack = stackPush
但是,当使用 3.1.4 创建 Gradle 项目时,此行出错,其中原生库由 Gradle 引入,使用此 build.gradle:
import org.gradle.internal.os.OperatingSystem
version '1.0-SNAPSHOT'
apply plugin: 'scala'
switch ( OperatingSystem.current() ) {
case OperatingSystem.WINDOWS:
project.ext.lwjglNatives = "natives-windows"
break
case OperatingSystem.LINUX:
project.ext.lwjglNatives = "natives-linux"
break
case OperatingSystem.MAC_OS:
project.ext.lwjglNatives = "natives-macos"
break
}
project.ext.lwjglVersion = "3.1.4" //if this is 3.1.3 it works
repositories {
mavenCentral()
}
dependencies {
compile "org.lwjgl:lwjgl:$lwjglVersion"
compile "org.lwjgl:lwjgl-opencl:$lwjglVersion"
runtime "org.lwjgl:lwjgl:$lwjglVersion:$lwjglNatives"
}
我收到以下错误:
java.lang.NoSuchMethodError: java.nio.ByteBuffer.limit(I)Ljava/nio/ByteBuffer;
at org.lwjgl.system.MemoryAccess$MemoryAccessorUnsafe.getCapacityOffset(MemoryAccess.java:159)
at org.lwjgl.system.MemoryAccess$MemoryAccessorUnsafe.<clinit>(MemoryAccess.java:132)
at org.lwjgl.system.MemoryAccess.getInstance(MemoryAccess.java:31)
at org.lwjgl.system.MemoryUtil.<clinit>(MemoryUtil.java:62)
at org.lwjgl.system.MemoryStack.<init>(MemoryStack.java:60)
at org.lwjgl.system.MemoryStack.create(MemoryStack.java:81)
at org.lwjgl.system.MemoryStack.create(MemoryStack.java:70)
at java.lang.ThreadLocal$SuppliedThreadLocal.initialValue(ThreadLocal.java:284)
at java.lang.ThreadLocal.setInitialValue(ThreadLocal.java:180)
at java.lang.ThreadLocal.get(ThreadLocal.java:170)
at org.lwjgl.system.MemoryStack.stackGet(MemoryStack.java:603)
at org.lwjgl.system.MemoryStack.stackPush(MemoryStack.java:612)
at JavaFXCanvas.main(JavaFXCanvas.java:16)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:389)
at com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:328)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:767)
[LWJGL] [MemoryAccessor] Unsupported JVM detected, this will likely result in low performance. Please inform LWJGL developers.
我怀疑是某处错误放置的 dll 导致了问题,但我没有找到它。 LWJGL 的 3.1.4 有没有其他人遇到过类似的问题?
谢谢!
我遇到了同样的错误,Slack Spasi 评论道:
the problem is https://bugs.openjdk.java.net/browse/JDK-4774077, workaround: either use Java 9 or the 3.1.4 snapshot 8
(it's identical to 3.1.4
except compiled with Java 8)
我一直在从事一个使用 LWJGL 的项目。我们在 3.1.3
版本中没有问题 运行 这一行val stack: MemoryStack = stackPush
但是,当使用 3.1.4 创建 Gradle 项目时,此行出错,其中原生库由 Gradle 引入,使用此 build.gradle:
import org.gradle.internal.os.OperatingSystem
version '1.0-SNAPSHOT'
apply plugin: 'scala'
switch ( OperatingSystem.current() ) {
case OperatingSystem.WINDOWS:
project.ext.lwjglNatives = "natives-windows"
break
case OperatingSystem.LINUX:
project.ext.lwjglNatives = "natives-linux"
break
case OperatingSystem.MAC_OS:
project.ext.lwjglNatives = "natives-macos"
break
}
project.ext.lwjglVersion = "3.1.4" //if this is 3.1.3 it works
repositories {
mavenCentral()
}
dependencies {
compile "org.lwjgl:lwjgl:$lwjglVersion"
compile "org.lwjgl:lwjgl-opencl:$lwjglVersion"
runtime "org.lwjgl:lwjgl:$lwjglVersion:$lwjglNatives"
}
我收到以下错误:
java.lang.NoSuchMethodError: java.nio.ByteBuffer.limit(I)Ljava/nio/ByteBuffer;
at org.lwjgl.system.MemoryAccess$MemoryAccessorUnsafe.getCapacityOffset(MemoryAccess.java:159)
at org.lwjgl.system.MemoryAccess$MemoryAccessorUnsafe.<clinit>(MemoryAccess.java:132)
at org.lwjgl.system.MemoryAccess.getInstance(MemoryAccess.java:31)
at org.lwjgl.system.MemoryUtil.<clinit>(MemoryUtil.java:62)
at org.lwjgl.system.MemoryStack.<init>(MemoryStack.java:60)
at org.lwjgl.system.MemoryStack.create(MemoryStack.java:81)
at org.lwjgl.system.MemoryStack.create(MemoryStack.java:70)
at java.lang.ThreadLocal$SuppliedThreadLocal.initialValue(ThreadLocal.java:284)
at java.lang.ThreadLocal.setInitialValue(ThreadLocal.java:180)
at java.lang.ThreadLocal.get(ThreadLocal.java:170)
at org.lwjgl.system.MemoryStack.stackGet(MemoryStack.java:603)
at org.lwjgl.system.MemoryStack.stackPush(MemoryStack.java:612)
at JavaFXCanvas.main(JavaFXCanvas.java:16)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:389)
at com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:328)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:767)
[LWJGL] [MemoryAccessor] Unsupported JVM detected, this will likely result in low performance. Please inform LWJGL developers.
我怀疑是某处错误放置的 dll 导致了问题,但我没有找到它。 LWJGL 的 3.1.4 有没有其他人遇到过类似的问题?
谢谢!
我遇到了同样的错误,Slack Spasi 评论道:
the problem is https://bugs.openjdk.java.net/browse/JDK-4774077, workaround: either use Java 9 or the
3.1.4 snapshot 8
(it's identical to3.1.4
except compiled with Java 8)