Похоже, у вас все работает (из комментариев), так что это здорово, но для адресации вашего кода OP:
При использовании блокировки на уровне класса в синхронизированной необходимо использовать блокировку на уровне класса на ждать / уведомлять - и не смешивать блокировку экземпляра (это) с блокировкой на уровне класса:
public class MyClass {
public static void main(String args[]) {
Thread t = new Thread(new Runnable() {
public void run() {
synchronized (MyClass.class) {
MyClass.class.notifyAll();
System.out.println("Awake");
}
}
});
t.start();
synchronized (MyClass.class) {
try {
System.out.println("here");
MyClass.class.wait();
} catch (InterruptedException ie) {
}
}
System.out.println("Done");
}
}
Отпечатки:
here
Awake
Done
В вашем случае OP вы использовали блокировку на уровне класса для synchronized
и использования this
блокировки объекта на notifyall
:
synchronized(BrandingGui.class) {
notifyAll(); // WRONG - this is the `this` instance lock.
}
Так что в этом случае это должно быть:
synchronized(BrandingGui.class) {
BrandingGui.class.notifyAll();
}