静态变量生成:非静态变量,不能从静态上下文错误中引用

时间:2012-08-20 19:13:31

标签: java static jdialog

我在这里不知所措。

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

        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)中从静态上下文引用非静态变量

关于我收到此错误的原因的任何想法都会非常有用

4 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:2)

而不是this

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

(或)

static void conflict_dialog(){

中删除静态内容

因为“conflict_dialog”是静态的(类范围),所以无法访问实例范围(this)。

答案 2 :(得分:0)

问题在于:

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

你是一个静态的方法 - 你期望this是什么? 可能适合根据thinksteep的答案构建新的UI - 或者您可能希望使用来自其他地方的现有引用。很难说肯定。当您编写该代码时,您想要 this引用什么内容?

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

答案 3 :(得分:0)

当类在程序中第一次加载时,静态方法会执行。

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

  'ClassName.mystaticethod();'

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

'this'指的是我们调用方法或变量的当前对象。

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

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