我正在尝试运行一个PApplet类。我在MacOS中的Eclipse上运行它。所有必需的库文件都包含在应用程序中,并使用Java1.8编译和运行该类。Mac OS版本为Catalina,10.15.6 (19G2021)。我收到以下错误:
2020-10-13 13:23:51.528 java[20420:1238853] Apple AWT Internal Exception: NSWindow drag regions should only be invalidated on the Main Thread!
2020-10-13 13:23:51.528 java[20420:1238853] *** 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 0x00007fff338dbb57 __exceptionPreprocess + 250
1 libobjc.A.dylib 0x00007fff6c7245bf objc_exception_throw + 48
2 CoreFoundation 0x00007fff3390434c -[NSException raise] + 9
3 AppKit 0x00007fff30afe5ec -[NSWindow(NSWindow_Theme) _postWindowNeedsToResetDragMarginsUnlessPostingDisabled] + 310
4 AppKit 0x00007fff30ae6052 -[NSWindow _initContent:styleMask:backing:defer:contentView:] + 1416
5 AppKit 0x00007fff30ae5ac3 -[NSWindow initWithContentRect:styleMask:backing:defer:] + 42
6 libnativewindow_macosx.jnilib 0x000000015e4d8f9e Java_jogamp_nativewindow_macosx_OSXUtil_CreateNSWindow0 + 398
7 ??? 0x0000000112dad407 0x0 + 4611298311
)
libc++abi.dylib: terminating with uncaught exception of type NSException参考代码,我写的。
package module1;
import processing.core.PApplet;
import de.fhpotsdam.unfolding.UnfoldingMap;
import de.fhpotsdam.unfolding.geo.Location;
import de.fhpotsdam.unfolding.providers.AbstractMapProvider;
import de.fhpotsdam.unfolding.providers.Google;
import de.fhpotsdam.unfolding.providers.MBTilesMapProvider;
import de.fhpotsdam.unfolding.utils.MapUtils;
public class HelloWorld extends PApplet
{
/** Your goal: add code to display second map, zoom in, and customize the background.
* Feel free to copy and use this code, adding to it, modifying it, etc.
* Don't forget the import lines above. */
// You can ignore this. It's to keep eclipse from reporting a warning
private static final long serialVersionUID = 1L;
/** This is where to find the local tiles, for working without an Internet connection */
public static String mbTilesString = "blankLight-1-3.mbtiles";
// IF YOU ARE WORKING OFFLINE: Change the value of this variable to true
private static final boolean offline = false;
/** The map we use to display our home town: La Jolla, CA */
UnfoldingMap map1;
/** The map you will use to display your home town */
UnfoldingMap map2;
public void setup() {
size(800, 600, P2D); // Set up the Applet window to be 800x600
// The OPENGL argument indicates to use the
// Processing library's 2D drawing
// You'll learn more about processing in Module 3
// This sets the background color for the Applet.
// Play around with these numbers and see what happens!
this.background(200, 200, 200);
// Select a map provider
AbstractMapProvider provider = new Google.GoogleTerrainProvider();
// Set a zoom level
int zoomLevel = 10;
if (offline) {
// If you are working offline, you need to use this provider
// to work with the maps that are local on your computer.
provider = new MBTilesMapProvider(mbTilesString);
// 3 is the maximum zoom level for working offline
zoomLevel = 3;
}
// Create a new UnfoldingMap to be displayed in this window.
// The 2nd-5th arguments give the map's x, y, width and height
// When you create your map we want you to play around with these
// arguments to get your second map in the right place.
// The 6th argument specifies the map provider.
// There are several providers built-in.
// Note if you are working offline you must use the MBTilesMapProvider
map1 = new UnfoldingMap(this, 50, 50, 350, 500, provider);
map2 = new UnfoldingMap(this, 450, 450, 350, 500, provider);
// The next line zooms in and centers the map at
// 32.9 (latitude) and -117.2 (longitude)
map1.zoomAndPanTo(zoomLevel, new Location(32.9f, -117.2f));
map2.zoomAndPanTo(zoomLevel, new Location(32.9f, -117.2f));
// This line makes the map interactive
MapUtils.createDefaultEventDispatcher(this, map1);
MapUtils.createDefaultEventDispatcher(this, map2);
// TODO: Add code here that creates map2
// Then you'll modify draw() below
}
/** Draw the Applet window. */
public void draw() {
// So far we only draw map1...
// TODO: Add code so that both maps are displayed
map1.draw();
map2.draw();
}
}发布于 2021-02-18 20:55:07
我不能给你一个完整的答案,但我想我有一个变通的办法,而且可能已经缩小了范围(假设你的问题和我的问题是一样的,它肯定是一样的)……我认为这与旧JOGL版本的使用有关,我在JOGL 2.1.5ish中看到了这一点。大概由于JOGL的更新版本的存在,这个问题仍然没有得到解决。不过,我还不能测试这个理论,希望我能早点有机会这样做。
解决方法
据我所知,这个问题最初是在JDK8u252+和JDK11.0.7+版本中出现的。如果我使用JDK8u242或JDK11.0.6,那么我不会再看到这个问题。
调查
根据我第一次看到问题的版本,它似乎与2020年1月到2020年4月的提交有关,可能是这个提交:OpenJDK project中的4f1fabd8d08581bc9e0c4b3cc7dffb7f7cc0d5c8。然而,话虽如此,对这一特定提交的指针要有很大的保留,因为它基本上只是在正确的时间范围内(我认为)进行的一次编辑,它涉及的似乎是相关的代码。我只提到它,以防它可以帮助在该领域有更多知识的人缩小问题的范围。
发布于 2021-12-21 10:04:28
我面对同样的problem.Just,使用早期版本的java8 (JDK8u202),并将eclipse编译器设置为1.8级,然后您应该能够消除这个错误。
发布于 2022-02-10 20:12:43
jre必须使用jdk8u242-b08。download from here
https://stackoverflow.com/questions/64331790
复制相似问题