浏览代码

[libgdx] SkeletonViewer, try to disable reflective access warning.

Nathan Sweet 5 年之前
父节点
当前提交
742d11f65f
共有 1 个文件被更改,包括 14 次插入0 次删除
  1. 14 0
      spine-libgdx/spine-skeletonviewer/src/com/esotericsoftware/spine/SkeletonViewer.java

+ 14 - 0
spine-libgdx/spine-skeletonviewer/src/com/esotericsoftware/spine/SkeletonViewer.java

@@ -34,6 +34,7 @@ import static com.badlogic.gdx.scenes.scene2d.actions.Actions.*;
 
 import java.io.File;
 import java.lang.Thread.UncaughtExceptionHandler;
+import java.lang.reflect.Field;
 
 import com.badlogic.gdx.ApplicationAdapter;
 import com.badlogic.gdx.Gdx;
@@ -1110,6 +1111,19 @@ public class SkeletonViewer extends ApplicationAdapter {
 	}
 
 	static public void main (String[] args) throws Exception {
+		try { // Try to turn off illegal access log messages.
+			Class loggerClass = Class.forName("jdk.internal.module.IllegalAccessLogger");
+			Field loggerField = loggerClass.getDeclaredField("logger");
+			Class unsafeClass = Class.forName("sun.misc.Unsafe");
+			Field unsafeField = unsafeClass.getDeclaredField("theUnsafe");
+			unsafeField.setAccessible(true);
+			Object unsafe = unsafeField.get(null);
+			Long offset = (Long)unsafeClass.getMethod("staticFieldOffset", Field.class).invoke(unsafe, loggerField);
+			unsafeClass.getMethod("putObjectVolatile", Object.class, long.class, Object.class) //
+				.invoke(unsafe, loggerClass, offset, null);
+		} catch (Throwable ex) {
+		}
+
 		SkeletonViewer.args = args;
 
 		String os = System.getProperty("os.name");