2012-04-09 17 views
2

私はJythonプログラムから呼び出したいJavaプログラムを持っています。私は互いに2つのインターフェースを持つことができたいと思っていますし、JythonからアクションリスナーをパラメータとしてJavaプログラムを呼び出すことを望んでいましたが、これまでは運がありませんでした。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

すでに動作している方法は、actionPerformedメソッドを修正する必要があります。このメソッドは、不正な署名を持ち、selfパラメータを宣言していません。 Javaコードで

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

、あなたはセミコロンのカップルを逃し、あなたがフレームを表示していないので、明示的にあなたの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); 
    } 
} 

私は、私はPythonスクリプトを実行し、それが魅力のように働いた、EclipseでPyDevはプロジェクトでEclipseのJavaプロジェクトのJavaコードとPythonコードをしました。

+0

ご協力いただきありがとうございます。スペルミスが問題でした。この文脈では、私のIDE(JHepWork)内からprintステートメントが正しく機能しませんでした。それは今でも動作します。再度、感謝します。 –

関連する問題