0
public class event {
    public static void main(String[] args) {
        Sframe frame = new Sframe();
        frame.setSize(800,600);
        frame.setDefaultCloseOperation(javax.swing.JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);

    }
}

class Sframe extends javax.swing.JFrame {
    public Sframe() {
        Spanel panel = new Spanel();
        getContentPane().add(panel);
        panel.buttonadd();
        //panel.buttonadd();
    }
}

class Spanel extends javax.swing.JPanel {

    public void buttonadd() {
        javax.swing.JButton blackb = new JButton("Black");
        add(blackb);
        blackb.addActionListener((ActionListener)EventHandler
        .create(ActionListener.class,this,"hello"));
    }
    public void hello() {
        System.out.println("I love every girl");
    }
    static int i;
}

黒いボタンをクリックすると、次のエラーがスローされます。CoreJavaの本をフォローしています。

Exception in thread "AWT-EventQueue-0" java.lang.RuntimeException: No method called hello on class Spanel with no arguments
at java.beans.EventHandler.invokeInternal(EventHandler.java:476)
at java.beans.EventHandler.access$000(EventHandler.java:278)

エラーで多くの行をスキップしました...その長いリストです。

4

1 に答える 1

1

これが機能するには、ターゲットクラスがである必要がありますpublic。リフレクションは内部で使用されており、ターゲットメソッドを見つけるEventHandlerためにクラスしか使用できないという制限があります。public

public class Spanel {
于 2013-03-06T12:43:46.630 に答える