私の頭に浮かんだ 1 つの解決策は、既存の Java プログラムをラップする Java プログラムを作成することです。
元のプログラムが単一の .jar で配布されているとしましょう。main
次に、この jar を依存関係としてコンパイルし、クラスパスでこの jar を使用して実行し、jar の関数を呼び出す関数を含む Java クラスを作成しますmain
。
public class WrapMyApp {
public static void main(String[] args) {
com.myorg.MyApp.main(args);
}
}
したがって、この手法を使用すると、JVM を制御でき、 への呼び出しの前後にコードを挿入できますmain
。
GUI から情報を取得するには、どのようなトリックを使用できますか? 運が良ければ、リフレクション API を介して GUI コンポーネントにアクセスできるかもしれません。もう 1 つの解決策は、 から始めて GUI をトラバースすることJFrame
です。これは、GUI レイアウトが事前にわかっていて、十分に静的であることを意味します。例 :
JWindow w = (JWindow) Window.getWindows()[0];
JPanel p = (JPanel) w.getContentPane().getComponent(2);
JTextArea t = (JTextArea) p.getComponent(5);
String s = t.getText();
SwingExplorerなどのツールを使用して GUI レイアウトを探索し、コンポーネントが配置されている場所を見つけることができます。
これが機能しない場合は、主要なイベントをリッスンして、EventQueue にフックすることを試みることができます。
Toolkit.getDefaultToolkit().addAWTEventListener(new AWTEventListener() {
public void eventDispatched(AWTEvent event) {
// useful code here
}
}, AWTEvent.KEY_EVENT_MASK);
SwingUtilities.invokeLater()
GUI コンポーネントにアクセスしようとするときは、コードを , 内にラップすることを忘れないでください。