Почему я получаю сообщение об ошибке «Не найдено подходящего метода для анонимного»? - PullRequest
1 голос
/ 11 декабря 2011
Runnable r = new Runnable() {
    @Override
    public void run() {
        if(varx) {
            new displayFullScreen().setVisible(true);
        } else {
            javax.swing.JOptionPane.showMessageDialog(this, "dfv"); // this statement gives an error
        }
    }
};
new Thread(r,"full_screen_display").start();

Ошибка в отмеченной строке говорит "No suitable method found for anonymous (<java.lang.Runnable>,java.lang.String) "

Почему это так, когда я прямо написал javax.swing._CLASS_?

Ответы [ 3 ]

4 голосов
/ 11 декабря 2011

Проблема в том, что this в этой строке относится к анонимному Runnable созданному вами экземпляру, а не к классу, который его окружает. Вам нужно будет более четко определить, что this вы имеете в виду.

Если включающий класс назван Foo и является колебанием Component, вы должны написать:

javax.swing.JOptionPane.showMessageDialog(Foo.this, "dfv"); 

См. Вложенные классы для получения дополнительной информации.

0 голосов
/ 11 декабря 2011

JOptionPane.showMessageDialog документация говорит:

parentComponent - определяет фрейм, в котором отображается диалоговое окно;если ноль, или если parentComponent не имеет Frame, используется Frame по умолчанию

javax.swing.JOptionPane.showMessageDialog(this, "dfv"); не будет работать, поскольку this является Runnable, который не наследуется от Component.Используйте это вместо:

javax.swing.JOptionPane.showMessageDialog(null, "dfv");
0 голосов
/ 11 декабря 2011

Причина в том, что javax.swing.JOptionPane.showMessageDialog ожидает Component в качестве первого аргумента, но вы передаете this, что является Runnable (анонимным).

...