/** Returns a created or reused named display. */ public static long openDisplay(String name) { long dpy = 0; NamedDisplay namedDpy = null; name = validateDisplayName(name); boolean reused = false; synchronized (globalLock) { for (int i = 0; i < reusableDisplayList.size(); i++) { if (reusableDisplayList.get(i).getName().equals(name)) { namedDpy = reusableDisplayList.remove(i); dpy = namedDpy.getHandle(); reused = true; break; } } if (0 == dpy) { dpy = XOpenDisplay(name); if (0 == dpy) { throw new NativeWindowException( "X11Util.Display: Unable to create a display(" + name + ") connection. Thread " + Thread.currentThread().getName()); } // if you like to debug and synchronize X11 commands .. // setSynchronizeDisplay(dpy, true); namedDpy = new NamedDisplay(name, dpy); pendingDisplayList.add(namedDpy); } namedDpy.addRef(); openDisplayMap.put(dpy, namedDpy); openDisplayList.add(namedDpy); if (markAllDisplaysUnclosable) { namedDpy.setUncloseable(true); } } if (DEBUG) { System.err.println( "X11Util.Display: openDisplay [reuse " + reused + "] " + namedDpy + ". Thread " + Thread.currentThread().getName()); // Thread.dumpStack(); } return namedDpy.getHandle(); }