2012-07-16 42 views
1

我在java swing中创建了一个GUI,但是我为该GUI的功能制作了很多python脚本,有没有可以使用我的python脚本在Java Swing GUI界面中显示内容?谢谢!在Java GUI中使用Python

回答

3

退房的Jython(http://www.jython.org/

这是Java中的一个Python实现。

从理论上说,你不应该有改变你的Python代码(如果它“品质优良”),但在实践中,我建议你将不得不在这里和那里做一些改变。我不亲自使用Jython,但所有各种python实现通常或多或少兼容,但不完全相同。您将无法使用依赖于C ABI的Python库,但纯Python脚本应该可以工作。

+0

我需要转换所有脚本吗? – enginefree 2012-07-16 15:50:05

+0

@ user1510602这是Java中的python实现。查看他们记录的差异。 – Marcin 2012-07-16 15:51:48

+0

@ user1510602:在已编辑的回复中回答。 :) – Arafangion 2012-07-16 15:52:26

0

您可能不想为此应用程序的最终版本执行此操作,但对于快速而肮脏的方法,您可以在java中运行外部程序并捕获输出。 (之前我曾经使用过这个功能,当时我正在将一个程序从python移植到java的过程中,并希望在java后端完成之前查看java前端是否工作,而不用担心替换CPython模块。)这个示例程序运行Python程序test.py并打印输出:

import java.io.*; 

class Jexec{ 
    public void Jexec(){} 

    private String exec(String execStr){ 
    try{ 
     // run process and capture stdout 
     Process p = Runtime.getRuntime().exec(execStr); 
     InputStream s = p.getInputStream(); 

     // convert stdout to a string 
     BufferedReader br = new BufferedReader(new InputStreamReader(s)); 
     StringBuffer sb = new StringBuffer(); 
     String line; 
     while ((line = br.readLine()) != null) { 
     sb.append(line).append("\n"); 
     } 
     String output = sb.toString(); 

     p.destroy(); 
     return output.toString(); 

    }catch(Exception e){ 
     //actually handle the error here 
     e.printStackTrace(); 
     return String.format("*** Running \"%s\" failed. ***",execStr); 
    } 
    } 

    public static void main(String[] args){ 
    Jexec je = new Jexec(); 
    System.out.println(je.exec("python test.py")); //in your case, you would use the output instead of just printing it 
    } 
} 

这是超级片状,所以,再一次,我只用它来临时测试目的。但对于这些情况,这真的很有帮助。

+0

我发现了一个更好的解决方案,jymatisse,一个Swing GUI生成器,但可以在Python的支持代码,http://javaforge.com/project/11 – enginefree 2012-07-16 18:20:15