2016-08-03 23 views
0

私は、JavaとPythonを使って、GUI用のJavaとバックエンド用のPythonを使ってプロジェクトを進めています。Java jarファイルからpythonスクリプトを呼び出す

Runtime r = Runtime.getRuntime(); 
String pyScript = "resources/script.py"; 
String scriptPath = getClass().getResource(pyScript).toExternalForm(); 
// Strip "file/" from path 
scriptPath = scriptPath.substring(scriptPath.indexOf("/") + 1); 
Process p = r.exec("python " + scriptPath) 

Pythonスクリプトは、Javaプロジェクトのsrcフォルダ内のリソースと呼ばれるフォルダにあります。ボタンは次のコードを使用して押されたときにJavaプログラムは、Pythonスクリプトを呼び出します。このコードは、IDE(IntelliJ)でプログラムを実行すると動作しますが、.jarファイルを作成してスクリプトを実行しようとしても何も起こりません。プログラムが.jarファイル内のスクリプトを見つけられることを確認できます。 スクリプトを実行するにはどうすればよいですか?

+0

'' r.exec(...)の前に '' System.out.println( "Scriptpath:" + scriptPath);を挿入してください。たぶんこれはあなたにヒントを与えます – JimHawkins

+0

@JimHawkins私はjarを実行するとそれを表示するためにJOptionDialogを追加し、Pythonスクリプトを配置しました。 –

+1

srcからスクリプトを移動して外に置くことができます。 srcの部分であれば、それ自体がコンパクトなファイルであるjarファイル内にバンドルされています。 Alrernateの方法は、実行時にscript.pyを動的に作成して実行し、.pyファイルを削除することです。 – Aditya

答えて

0

このソリューションでは、ファイルが存在する場合にスクリプトを実行します。スクリプトは、完全または相対パス上にある可能性があります。スクリプトはjarファイルにありません。

TestPython.java

import java.lang.*; 
import java.io.*; 

public class TestPython { 
    public static void main(String[] args) { 

     System.out.println("I will run a Python script!"); 
     Runtime r = Runtime.getRuntime(); 
     String pyScript = "py/test.py"; 

     File f = new File(pyScript); 
     if (f.exists() && !f.isDirectory()) { 
      try { 
       Process p = r.exec("python " + pyScript); 
       BufferedReader in = new BufferedReader(
        new InputStreamReader(p.getInputStream())); 
       String line = null; 
       while ((line = in .readLine()) != null) { 
        System.out.println(line); 
       } 
       System.out.println("Python script ran!!"); 
      } catch (Exception ex) { 
       System.out.println("Something bad happened!!"); 
       ex.printStackTrace(); 
      } 
     } else { 
      System.out.println("Unexistent file!" + pyScript); 
     } 
    } 
} 

PY/test.py

print("I'm a Python script!!!") 

出力:

私はPythonスクリプトを実行します!

私はPythonスクリプトです!

Pythonスクリプトが実行されました。

関連する問題