Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Apple AWT Internal Exception: NSWindow drag regions should only be invalidated on the Main Thread

I am trying to run a PApplet class. I am running it on Eclipse, in MacOS. All the necessary Library files are included in the application and using Java 1.8 to compile and run the class. Mac OS Version is Catalina, 10.15.6 (19G2021). I am getting the following error:

    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

Reference Code that I have written.

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();
        }
    
        
    }
like image 983
Ani Avatar asked Oct 13 '20 08:10

Ani


1 Answers

I don't have a full answer for you, but I think I have a work-around as well as might have narrowed it down (assuming your issue is the same as mine, it certainly presents the same)... I think that it is related to use of old JOGL versions, I'm seeing it with JOGL 2.1.5ish. Presumably this remains unresolved due to the existence of newer versions of JOGL. I can't test this theory yet, though, hopefully I'll get a chance to do that sooner than later.

Workaround

As far as I can, the problem first started appearing with version JDK8u252+ and JDK11.0.7+. If I use JDK8u242 or JDK11.0.6 then I no longer see the issue.

Investigation

Based on the versions where I first see problems, It appears to be related to a commit in the Jan 2020 to April 2020 timeframe, possibly this commit: 4f1fabd8d08581bc9e0c4b3cc7dffb7f7cc0d5c8 in the OpenJDK project. However, with that said, take the pointer to this specific commit with a huge grain of salt, because it's basically just an edit in the right timeframe (I think) that touches what appears to be related code. I only mention it in case it might help someone with more knowledge in the area narrow down the problem.

like image 68
Mike Avatar answered Nov 14 '22 02:11

Mike