2

我在这里不知所措。

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

        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

4 回答 4

3

您正在使用对this具有静态方法内部的对象实例的引用,该方法没有this.

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

或将方法更改为非静态并从UI.

于 2012-08-20T19:16:52.707 回答
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)。

于 2012-08-20T19:14:38.957 回答
0

这是问题所在:

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

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

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

于 2012-08-20T19:17:14.483 回答
0

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

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

  'ClassName.mystaticethod();'

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

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

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

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

于 2012-08-20T19:52:11.053 回答