/******************************************************************************* * Copyright (c) 2000, 2011 IBM Corporation and others. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 * which accompanies this distribution, and is available at * https://www.eclipse.org/legal/epl-2.0/ * * SPDX-License-Identifier: EPL-2.0 * * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/ package org.eclipse.swt.widgets; /** * Instances of this class are used to ensure that an * application cannot interfere with the locking mechanism * used to implement asynchronous and synchronous communication * between widgets and background threads. */ class RunnableLock { Runnable runnable; Thread thread; Throwable throwable; RunnableLock (Runnable runnable) { this.runnable = runnable; } boolean done () { return runnable == null || throwable != null; } void run (Display display) { if (runnable != null) { try { runnable.run (); } catch (RuntimeException exception) { display.getRuntimeExceptionHandler ().accept (exception); } catch (Error error) { display.getErrorHandler ().accept (error); } } runnable = null; } }