Here you can find the source of showCursor(final Cursor cursor, final Component caller, final boolean includeParent, boolean immediate)
private static void showCursor(final Cursor cursor, final Component caller, final boolean includeParent, boolean immediate)
//package com.java2s; /*// w ww .j a v a 2s. c o m * WbSwingUtilities.java * * This file is part of SQL Workbench/J, http://www.sql-workbench.net * * Copyright 2002-2017, Thomas Kellerer * * Licensed under a modified Apache License, Version 2.0 * that restricts the use for certain governments. * You may not use this file except in compliance with the License. * You may obtain a copy of the License at. * * http://sql-workbench.net/manual/license.html * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * * To contact the author please send an email to: support@sql-workbench.net * */ import java.awt.Component; import java.awt.Cursor; import java.awt.EventQueue; import java.awt.Window; import javax.swing.SwingUtilities; public class Main { private static void showCursor(final Cursor cursor, final Component caller, final boolean includeParent, boolean immediate) { if (caller == null) return; Runnable r = () -> { caller.setCursor(cursor); if (includeParent) { final Window w = getWindowAncestor(caller); if (w != null) { w.setCursor(cursor); } } }; if (EventQueue.isDispatchThread()) { r.run(); } else { if (immediate) { try { EventQueue.invokeAndWait(r); } catch (Throwable th) { } } else { EventQueue.invokeLater(r); } } } public static Window getWindowAncestor(Component caller) { if (caller == null) return null; if (caller instanceof Window) { return (Window) caller; } return SwingUtilities.getWindowAncestor(caller); } /** * A simple wrapper around EventQueue.invokeLater(). * * @param runner the task to execute */ public static void invokeLater(Runnable runner) { EventQueue.invokeLater(runner); } }