Не совсем.Если вы переключитесь на использование (более современного) java.util.concurrent
способа ведения дел, вы можете использовать две лямбды и сделать это так:
public static void addTimeout(final Component c, long timeout) {
Executors.newSingleThreadScheduledExecutor().schedule(() -> {
if (c.isVisible()) {
SwingUtilities.invokeLater(() -> {
c.setVisible(false);
});
}
return null;
}, timeout, TimeUnit.MILLISECONDS);
}
..., что более компактно.Но кроме переключения на запланированный исполнитель потока, это действительно просто синтаксический сахар на том, что у вас есть выше.
(Примечание: если вы на самом деле используете приведенный выше код, вероятно, было бы лучше сохранить результат Executors.newSingleThreadScheduledExecutor()
для будущих вызовов.)