1

数時間コードを修正しようとしてきましたが、まだこのエラーを取り除くことができません。以下のコードではOne.addActionListener(this)、両方とも「静的コンテキストではこれを使用できません」というTwo.addActionListener(this)赤い行があります。thisできれば助けてください。ありがとう!

    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.WindowEvent;
    import java.awt.event.WindowListener;    
    import javax.swing.JButton;
    import javax.swing.JFrame;

    public class TheMain extends JFrame implements ActionListener, WindowListener {

        int input1 = 0;
        int input2 = 0;

        public static void main(String[] args) {
            TheMain main = new TheMain();
            JButton One = new JButton("1");
            One.setSize(10, 10);
            One.addActionListener(this);    
            JButton Two = new JButton("2");
            Two.setSize(10, 10);
            Two.addActionListener(this);    
    }

    public TheMain(){
    JButton One = new JButton("1");
    One.setSize(10, 10);
    One.addActionListener(this);            

    JButton Two = new JButton("2");
    Two.setSize(10, 10);
    Two.addActionListener(this);        

    JFrame frame = new JFrame("window");
    frame.setSize(200, 250);
    frame.setVisible(true);
    frame.add(One);
    frame.add(Two);
    }

    public void actionPerformed(ActionEvent e) {
        if(input1 != 0){
            if(input2 != 0){
                System.out.println("Max 2 numbers!");
            }else{
                input2 = 1;
            }
        }else{
            input1 = 1;
        }           
    }

    public void actionPerformed1(ActionEvent e) {
        if(input1 != 0){
            if(input2 != 0){
                System.out.println("Max 2 numbers!");
            }else{
                input2 = 2;
            }
        }else{
            input1 = 2;
        }           
    }

    @Override
    public void windowOpened(WindowEvent e) {
        // TODO Auto-generated method stub    
    }

    @Override
    public void windowClosing(WindowEvent e) {
        // TODO Auto-generated method stub    
    }

    @Override
    public void windowClosed(WindowEvent e) {
        // TODO Auto-generated method stub    
    }

    @Override
    public void windowIconified(WindowEvent e) {
        // TODO Auto-generated method stub    
    }

    @Override
    public void windowDeiconified(WindowEvent e) {
        // TODO Auto-generated method stub    
    }

    @Override
    public void windowActivated(WindowEvent e) {
        // TODO Auto-generated method stub    
    }

    @Override
    public void windowDeactivated(WindowEvent e) {
        // TODO Auto-generated method stub    
    }    
}
4

2 に答える 2

4

thisメソッド(あなたのstatic場合はメソッド)では使用できませんmain。は、メソッドが実行されているクラスの現在のインスタンスthisを表すためです。

メソッドはインスタンスなしstaticで呼び出すことができるメソッドであるため、 常に意味があるとは限りません。したがって、Javaはコンパイルエラーを出しますthisCannot use this in a static context

コードを次のように変更する必要があります

One.addActionListener(main); 

mainはすでに作成されたインスタンスであるため

于 2013-07-19T12:07:33.117 に答える
3

静的メソッド内では、静的変数またはローカル変数のみを使用できます。インスタンス変数は使用できずthis、インスタンスを表すため、メソッドでTheMain使用することはできません. あなたは変わるべきですmainstatic

addActionListener(this);

addActionListener(main);
于 2013-07-19T12:07:50.120 に答える