私はこれに関するかなりの研究を行いましたが、残念ながら私が現在持っている問題に適した答えを見つけることができませんでした。Javaプロセスからの対話的なPython GUI(Matplotlib)の実行
私の質問は、「Javaからpythonスクリプトを実行するにはどうすればよいですか」という質問には、同じ回答を含む少なくとも10個のスレッドがすべて存在します。私はそれを行う方法を理解しています。次のように私の問題は次のとおりです。
私はこのようなものに見えるの.pyファイル(gui.py
)があります。
#!/usr/bin/env python
import matplotlib.pyplot as plt
import copy
import math
import numpy as np
class GUI(object):
...
...
...
if __name__ == '__main__':
GUI.run()
このGUIは、ユーザーが何かを描画した上でインタラクティブmatplotlibのプロットであるが。詳細は重要ではありません - 結論はmatplotlibウィンドウが開いている限りスクリプトが実行されることです。
今、私は側面にJavaアプリケーションを構築しています。クリックすると、スクリプトを呼び出すJava Process
オブジェクトが作成されます。私はPIPEをJavaランタイムから呼び出せないという他の投稿を読んでいるので、このpythonスクリプトを囲む.sh
ファイルを作成しました。
shell.sh
: - 私は、端末の通常のようにすべて正しく機能から、それを実行したときに
view.getLaunchGuiButton().addActionListener((e) -> {
try {
String[] prcArgs = new String[] { "/mypath/to/shell.sh" };
Process proc = Runtime.getRuntime().exec(prcArgs);
} catch (IOException e1) {
e1.printStackTrace();
}
});
シェルスクリプトが正しい:
#!/bin/sh
python /mypath/to/the/gui.py
Javaは、シェルスクリプトを呼び出します。
私はJavaが実際にシェルスクリプトを実行していることを知り、pythonスクリプトを呼び出しています。エラーはありません。私はBufferedReader
を設定しませんでした。なぜなら、何も読むことができないからです。私は、GUIを開くだけです。私は問題は、一度シェルが実行されると、Runtime
によって開かれた "端末"というように、すぐに閉じられるので、それはPythonスクリプトとGUIを殺すということです。
私の質問は、Runtime
を単に実行して、すぐにPythonスクリプト(端末を閉じる)をただちに終了させることです。
物事は私がすでにやった:
chmod +x ../../shell.sh
- は、シェルスクリプトで
nohup /call/python/here &
を使用してみました。うまくいきませんでした。 Runtime
の代わりにJavaのProcessBuilder
を使用して試しました。変わりはない。
あらかじめありがとうございます。私はxtermの-ED幹部のJavaボタンのリスナーから