gpt4 book ai didi

java - 通过 EventHandler 创建的 ActionListener 不起作用

转载 作者:行者123 更新时间:2023-12-01 14:47:46 25 4
gpt4 key购买 nike

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;
}

当我点击黑色按钮时,它会抛出以下错误。我正在关注《Core Java》一书。

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)

我在错误中跳过了很多行...它是一个很长的列表。

最佳答案

为此,目标类必须是public。反射由 EventHandler 在底层使用,并且具有只能使用 public 类来查找目标方法的限制。

public class Spanel {

关于java - 通过 EventHandler 创建的 ActionListener 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15247302/

25 4 0