@Davidaa_WoW

Почему возникает java.lang.IllegalMonitorStateException при построении паттерна посредник?

Пытаюсь создать паттерн посредник
Есть интерфейс Mediator:
package Eighth.mediator;

public interface Mediator {
    void notify(Components components);
}


Есть класс его реализующий:

package Eighth.mediator;

public class ConcreteMediator implements Mediator{
    @Override
    public void notify(Components components) {
        System.out.println("User pressed " + components.getName());
    }
}


Есть интерфейс компонентов:

package Eighth.mediator;

public interface Components {
    String getName();
    void onPress();
}


Есть несколько классов компонентов, похожих друг на друга, пример:
package Eighth.mediator;

public class Button implements Components{
    public Mediator mediator;

    private String name;

    public Button(String name) {
        this.name = name;
        mediator = new ConcreteMediator();
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void onPress(){
        mediator.notify();
    }
}


Пытаюсь это всё запустить в Main:

package Eighth.mediator;

public class Main {
    public static void main(String[] args) {
        Components button1 = new Button("Button1");
        Components button2 = new Button("Button2");
        Components checkbox1 = new Checkbox("Checkbox1");
        Components radioButton1 = new RadioButton("Radiobutton1");
        Components checkbox2 = new Checkbox("Checkbox2");
        button1.onPress();
        button2.onPress();

    }
}


Выскакивает та самая ошибка java.lang.IllegalMonitorStateException при выполнении метода onPress
В чём проблема?
  • Вопрос задан
  • 111 просмотров
Решения вопроса 1
xez
@xez Куратор тега Java
TL Junior Roo
Потому что вы вызываете метод .notify() из Object, а не из Mediator
вот тут:
public void onPress(){
        mediator.notify();
    }


у вас метод вот такой: void notify(Components components);
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы