2

Jythonプログラムから呼び出したいJavaプログラムがあります。2つのインターフェースを相互に接続できるようにしたいので、アクションリスナーをパラメーターとして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を単一のアプリケーションに統合するためのより良い方法がありますか、それともそれは良いことではありませんか?

4

1 に答える 1

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スクリプトを実行すると、それは魅力のように機能しました。

于 2012-04-09T22:27:23.037 に答える