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

静的メソッドは、クラスがプログラムで初めてロードされるときに実行されます。

静的メソッドまたは変数にアクセスするには、オブジェクトは必要ありません

  'ClassName.mystaticethod();'

ここではオブジェクトを作成していません。

そして、「this」は、メソッドまたは変数を呼び出している現在のオブジェクトを指します。

オブジェクトを作成しなくても、静的メソッドにアクセスできます。

したがって、静的メソッドの場合、「this」には意味がありません。作成されたオブジェクトがないため、「これ」(現在のオブジェクト)はありません。

于 2012-08-20T19:52:11.053 に答える
0

問題は次のとおりです。

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

あなたは静的メソッドにいます - あなたは何を期待thisしていますか? thinksteep 's answer に従って新しいを構築することが適切なUI場合があります-または、他の場所からの既存の参照を使用することもできます。確かに言うのは難しいです。そのコードを書いたとき、何を参照したかったのですか? this

(Java 命名規則に従うには、conflictクラスの名前を に変更する必要があることに注意してConflictください。メソッドの名前はおそらく に変更しshowConflictDialogsend_mode変数の名前はおそらく に変更する必要がありますsendMode。)

于 2012-08-20T19:17:14.483 に答える