我可以将Jython动作侦听器添加到java程序中吗?

时间:2012-04-09 21:35:58

标签: java jython actionlistener

我有一个Java程序,我想从Jython程序中调用它。我希望能够有两个接口,并希望从动作监听器作为参数从Jython调用Java程序,但到目前为止我没有运气。

Jython代码:

import sys
sys.path.append("sgJython.jar")
from java.awt.event import ActionListener
from java.awt.event import ActionEvent
from sg.gui import MainGui

class MyListener(ActionListener):
    def ActionPerformed(e):
          print("gotit")

ml = MyListener()
MainGui(ml)

Java代码:

package sg;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
class MainGui
{
public MainGui(ActionListener listener)
{
    top = new JFrame();
    top.setBounds(300, 300, 600, 300);
    JButton doneButton = new JButton("Done");
    doneButton.addActionListener(listener);
    top.add(doneButton)
}
}

还有其他方法吗?如果没有,是否有更好的方法将Java和Python集成到单个应用程序中,或者这不是一件好事吗?

1 个答案:

答案 0 :(得分:1)

它已经有效,你只需修复actionPerformed方法,该方法签名错误,并且不会声明self参数。

class MyListener(ActionListener):
    def actionPerformed(self, e):
          print("gotit")

在您的Java代码中,您错过了几个分号,因为您没有显示框架,除非您从Jython代码中明确询问它,否则它将不可见。所以我为测试目的稍微改了一下:

public class MainGui {

    private JFrame top;

    public MainGui(ActionListener listener) {
        top = new JFrame();
        top.setBounds(300, 300, 600, 300);
        JButton doneButton = new JButton("Done");
        doneButton.addActionListener(listener);
        top.add(doneButton);
        top.pack();
        top.setVisible(true);
    }
}

我在Eclipse中的Java项目中编写了Java代码,在Eclipse中的PyDev项目中编写了Python代码,然后运行了Python脚本,它就像一个魅力。