2016-04-21 56 views
0

这是一段代码来调用的MouseEvent我想与Java反射调用:如何使用反射

private void cardSlotMouseClicked(MouseEvent mouseEvent) { 
    // Some stuff 

} 

这里是班上ATM调用它的代码:

// cardSlot is a JPanel 

    this.cardSlot.addMouseListener(new MouseAdapter(){ 

     @Override 
     public void mouseClicked(MouseEvent mouseEvent) { 
      ATM.this.cardSlotMouseClicked(mouseEvent); 
     } 
    }); 

这是我的代码:

Class a = ATM.class; 

    Method m = a.getDeclaredMethod("cardSlotMouseClicked", MouseEvent.class); 


    m.setAccessible(true); 

    Object o = a.newInstance(); 

    m.invoke(o, "?"); // What is the argument? 

我试过MouseEvent.BUTTON1,但它不起作用。

回答

0

您需要一个MouseEvent类型的对象来传递给此invoke方法。要么你可以使用生成的MouseEvent系统(通过鼠标点击创建),也可以通过使用任何MouseEvent构造

在你的情况下创建一个虚拟鼠标事件,你可以调用所需的方法与这样的反思:

this.cardSlot.addMouseListener(new MouseAdapter(){ 

    @Override 
    public void mouseClicked(MouseEvent mouseEvent) { 
     Class a = ATM.class; 

     Method m = a.getDeclaredMethod("cardSlotMouseClicked", MouseEvent.class); 


     m.setAccessible(true); 

     Object o = a.newInstance(); 

     m.invoke(o, mouseEvent); 
    } 
}); 
+0

有没有办法告诉JPanel执行操作,因为MouseAdapter是由JPanel调用的? – user6212007

+0

无论你将添加此鼠标适配器,只要在该组件上单击鼠标,它将被调用 – Sanjeev

+0

我正在尝试模拟黑客。链接到ATM:https://codepad.co/snippet/yjATRN3S,卡片:https://codepad.co/snippet/Z0zZfNhW – user6212007