#java #macos #opengl #macos-catalina #jogl
#java #macos #opengl #macos-catalina #jogl
Вопрос:
В настоящее время я пытаюсь обновить программу, которая использует OpenGL. Мне нужно заставить программу работать в macOS X 10.15. Я использую JDK SE 14 и самую последнюю версию JOGL, найденную по адресу https://jogamp.org /. Проблема, с которой я сталкиваюсь, заключается в том, что когда программа пытается создать GLCanvas()
или GLJPanel()
, она мгновенно завершается сбоем. Ниже приведен фрагмент кода, который вызывает сбой.
public void initFrame(){
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
JRootPane root = frame.getRootPane( ); // make small title bar
root.putClientProperty( "Window.style", "small" );
GLCanvas canvas = new GLCanvas();
frame.setUndecorated(undecorated);
canvas.addGLEventListener(this);
canvas.addMouseListener(this);
canvas.addMouseMotionListener(this);
frame.setSize(frameWidth, frameHeight);
frame.setLocation(frameX,frameY);
frame.add(canvas);
GraphicsEnvironment env = GraphicsEnvironment.getLocalGraphicsEnvironment();
GraphicsDevice device = env.getDefaultScreenDevice();
FPSAnimator animator = new FPSAnimator(canvas,33);
frame.setVisible(true);
animator.start();
}
Следующая ошибка возникает, когда код достигает GLCanvas canvas = new GLCanvas()
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by com.jogamp.common.os.NativeLibrary$3 (file:/Users/bendavidson/NetBeansProjects/mlsim-master/lib/gluegen-rt.jar) to method java.lang.ClassLoader.findLibrary(java.lang.String)
WARNING: Please consider reporting this to the maintainers of com.jogamp.common.os.NativeLibrary$3
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
2020-08-24 14:59:37.054 java[1489:26665] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'NSWindow drag regions should only be invalidated on the Main Thread!'
*** First throw call stack:
(
0 CoreFoundation 0x00007fff31959797 __exceptionPreprocess 250
1 libobjc.A.dylib 0x00007fff6a653a9e objc_exception_throw 48
2 CoreFoundation 0x00007fff3198211c -[NSException raise] 9
3 AppKit 0x00007fff2eb6eddc -[NSWindow(NSWindow_Theme) _postWindowNeedsToResetDragMarginsUnlessPostingDisabled] 310
4 AppKit 0x00007fff2eb56842 -[NSWindow _initContent:styleMask:backing:defer:contentView:] 1416
5 AppKit 0x00007fff2eb562b3 -[NSWindow initWithContentRect:styleMask:backing:defer:] 42
6 libnativewindow_macosx.jnilib 0x000000012f2053fe Java_jogamp_nativewindow_macosx_OSXUtil_CreateNSWindow0 398
7 ??? 0x000000011c5bb6b0 0x0 4770739888
)
libc abi.dylib: terminating with uncaught exception of type NSException
Java Result: 134
Я не уверен, как интерпретировать эту ошибку, и мне было интересно, есть ли какие-либо обходные пути для того, чтобы заставить GLCanvas()
работать в macOS X 10.15. Я планирую перевести все приложение на Metal в ближайшие месяцы, но мне нужно быстрое исправление для предстоящего проекта.
Комментарии:
1. Лучше задайте свой вопрос на официальном форуме JogAmp. Не беспокойтесь о предупреждениях, используйте последний релиз-кандидат JOGL 2.4.0, чтобы избавиться от большинства из них. Это работает как шарм.
2. @gouessej Получается, что я не использовал самую последнюю версию JOGL… Я думал, что при выборе текущего zip-файла на веб-сайте Jogamp будет получена самая последняя версия. Оказывается, это была версия 2.3.2, а не 2.4. Нашел JOGL 2.4.0, и теперь он отлично работает!
3. Это релиз-кандидат, а не релиз. Когда релиз будет готов, то то, что вы называете текущей версией, станет JOGL 2.4.0. Я рад видеть, что у вас это работает.