我在这里不知所措。
我可以看到发生以下情况的原因:
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)中从静态上下文引用非静态变量
关于我收到此错误的原因的任何想法都会非常有用
答案 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”(当前对象)。