Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Apple AWT内部异常:NSWindow拖动区域应仅在主线程上无效_Java_Macos_Macos Catalina - Fatal编程技术网

Java Apple AWT内部异常:NSWindow拖动区域应仅在主线程上无效

Java Apple AWT内部异常:NSWindow拖动区域应仅在主线程上无效,java,macos,macos-catalina,Java,Macos,Macos Catalina,我想办一个PApplet班。我在Eclipse上运行它,在MacOS中。所有必需的库文件都包含在应用程序中,并使用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

我想办一个PApplet班。我在Eclipse上运行它,在MacOS中。所有必需的库文件都包含在应用程序中,并使用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();
        }
    
        
    }

我没有一个完整的答案给你,但我想我有一个解决办法,而且可能已经缩小了范围(假设你的问题和我的一样,它肯定会呈现相同的问题)。。。我认为这与使用旧的JOGL版本有关,我在jogl2.1.5ish中看到了这一点。可能由于存在较新版本的JOGL,这一问题仍未解决。不过,我还不能检验这个理论,希望我能尽早有机会做到这一点

解决方法

据我所知,问题首先出现在JDK8u252+和JDK11.0.7+版本中。如果我使用JDK8u242或JDK11.0.6,那么我就看不到这个问题了

调查

根据我第一次看到问题的版本,它似乎与2020年1月至2020年4月的提交有关,可能与以下提交有关:
4f1fabd8d08581bc9e0c4b3cc7dffb7f7cc0d5c8
。然而,尽管如此,还是要用大量的盐来表示这个特定的提交,因为它基本上只是在正确的时间范围内(我认为)进行的一次编辑,涉及到似乎相关的代码。我提到它只是为了帮助在这一领域有更多知识的人缩小问题的范围。

较旧的Oracle版本如下: