【问题标题】:static variable generating : non-static variable this cannot be referenced from a static context error静态变量生成:非静态变量无法从静态上下文错误中引用
【发布时间】:2012-08-20 19:13:31
【问题描述】:

我在这里不知所措。

我可以看到发生以下情况的任何原因:

        public class UI extends javax.swing.JFrame {
            .
            .
            .
            .
377:        private static JDialog dialog;
378:
379:        static void conflict_dialog(){
380:        dialog =  new conflict(this, true,new File("C:\\Users\\Soumya\\Desktop\\a.sh"), 2242);
381:        dialog.setVisible(send_mode);
            .
            .

            }

        }

无法编译的源代码 - 无法从静态上下文中引用的非静态变量 new_file_transfer.UI.conflict_dialog(UI.java:380)

任何关于我为什么会收到此错误的想法都会非常有帮助

【问题讨论】:

  • 这是一个类的实例,一个非静态成员。你不能从静态引用非静态。

标签: java static jdialog


【解决方案1】:

您在静态方法中使用了对带有this 的对象实例的引用,该方法没有this

您需要在调用中创建UI 的新实例: dialog = new conflict(New UI(), true, ...);

或将方法更改为非静态并从UI 的实例调用它。

【讨论】:

    【解决方案2】:

    中使用 new UI() 而不是 this
    dialog =  new conflict(this, true,new File("C:\\Users\\Soumya\\Desktop\\a.sh"), 2242);
    

    (或)

    static void conflict_dialog(){中删除静态

    因为“conflict_dialog”是静态的(类作用域),你不能访问实例作用域(this)。

    【讨论】:

    • conflict_dialog() 必须是静态的,但感谢您指出“这个”我完全错过了
    • @Soumyaxyz:如果是这样,您唯一的选择可能是使用 new UI(),但正如 Jon Skeet 所说,如果没有完整的上下文,很难说出正确的解决方案。
    • no new UI() 会完美运行(只是想继承外观)
    【解决方案3】:

    问题来了:

    dialog =  new conflict(this, ...);
    

    您使用的是静态方法 - 您希望 this 是什么? 可能根据 thinksteep 的回答构建一个新的 UI 是合适的 - 或者您可能希望使用其他地方的现有参考。很难确定。当您编写该代码时,您想要this 指的是什么?

    (请注意,要遵循 Java 命名约定,您的 conflict 类应该重命名为 Conflict;您的方法可能应该重命名为 showConflictDialog 并且您的 send_mode 变量可能应该是 sendMode。)

    【讨论】:

    • 不,我不需要它来引用 thisnew UI() 应该是我的工作(我只是想继承外观)
    • 感谢您提供有关命名约定的指针。我现在正在纠正那些(以及其他几个)。
    【解决方案4】:

    类在程序中首次加载时执行静态方法。

    访问静态方法或变量不需要对象

      'ClassName.mystaticethod();'
    

    这里我们还没有创建任何对象。

    而“this”指的是我们正在使用的当前对象调用方法或变量。

    即使不创建任何对象,我们也可以访问静态方法。

    所以在静态方法的情况下,“this”没有任何意义。因为没有创建对象,所以没有“this”(当前对象)。

    【讨论】:

      猜你喜欢
      • 2010-10-29
      • 1970-01-01
      • 1970-01-01
      • 2014-12-25
      • 1970-01-01
      • 2018-01-04
      • 2019-03-17
      • 2011-11-30
      相关资源
      最近更新 更多