为什么我会收到“找不到适合匿名的方法”错误?

发布于 2024-12-21 02:49:59 字数 511 浏览 2 评论 0原文

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();

标记行中的错误显示 “没有找到适合匿名的方法 (,java.lang.String)

当我直接编写 时为什么会这样javax.swing._CLASS_

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();

The error in the marked line says "No suitable method found for anonymous (<java.lang.Runnable>,java.lang.String)"

Why does it so when i have directly written javax.swing._CLASS_ ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

冰葑 2024-12-28 02:49:59

问题在于该行中的 this 引用了您创建的匿名 Runnable 实例,而不是它周围的类。您需要更明确地说明其中的 this 的含义。

如果封闭类名为 Foo,并且是一个 swing Component,则应编写:

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

请参阅 嵌套类 文档以获取更多信息。

The problem is that this in that line refers to the anonymous Runnable instance you've created, not the class that surrounds it. You'll need to be more explicit about what this you mean in there.

If the enclosing class is named Foo, and is a swing Component, you should write:

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

See the Nested Classes docs for more information.

淡墨 2024-12-28 02:49:59

原因是 javax.swing.JOptionPane.showMessageDialog 需要一个 Component 作为第一个参数,但您传入的是 this,它是一个可运行(匿名)。

The reason is javax.swing.JOptionPane.showMessageDialog expects a Component as the first argument, but you're passing in this, which is a Runnable (anonymous).

圈圈圆圆圈圈 2024-12-28 02:49:59

JOptionPane.showMessageDialog 文档 说:

parentComponent - 确定对话框所在的框架
显示;如果为 null,或者父组件没有 Frame,则使用默认值
使用框架

javax.swing.JOptionPane.showMessageDialog(this, "dfv"); 将不起作用,因为 this 是一个 Runnable ,它不继承自组件
使用这个代替:

javax.swing.JOptionPane.showMessageDialog(null, "dfv");

JOptionPane.showMessageDialog documentation says:

parentComponent - determines the Frame in which the dialog is
displayed; if null, or if the parentComponent has no Frame, a default
Frame is used

javax.swing.JOptionPane.showMessageDialog(this, "dfv"); will not work as this is a Runnable which does not inherit from Component.
Use this instead:

javax.swing.JOptionPane.showMessageDialog(null, "dfv");
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文