1

このコードスニペットを使用すると、プログラムの一部としてjarを実行できます。

File f = new File("client.jar");
URLClassLoader cl = new URLClassLoader(new URL[]{f.toURI().toURL(), null});
Class<?> clazz = cl.loadClass("epicurus.Client");
Method main = clazz.getMethod("main", String[].class);
main.invoke(null, new Object[]{new String[]{}});

とにかく、その外部プログラムのクラスを参照できることはありますか?
たとえば、JFrameのタイトルを変更できるようにしたいと思います。

4

1 に答える 1

3

私はあなたができると信じています。私は次のように試みます。

メインを呼び出した後、ループを実行して、関心のあるウィンドウにアクセスする必要があります (別のスレッドで実行できます)。

for(Window window : Window.getWindows()){
    if(window != null && window.isVisible() && window instanceof JFrame){
        JFrame jFrame = (JFrame)window;
    }
}

次に、リフレクションを介して JFrame のフィールドとメソッドにアクセスできます (または、必要に応じて、jFrame.getName() と一部の文字列を比較して、変更するフレームが意図したものであることを指定します)。

たとえば、JTextArea のフォント サイズとスタイルを変更することに関心があるとします。

Field textAreaField = jFrame.getClass().getDeclaredField("textArea");
textAreaField.setAccessible(true);

フィールドへのアクセスを許可し、必要に応じて変更できるようにします。

そこから、実際のオブジェクトが必要になります。

JTextArea textArea = (JTextArea) textAreaField.get(jFrame);

Font font = textArea.getFont();
textArea.setFont(new Font(font.getFontName(), font.getStyle(), 24));

そして、それはあなたのためにちょうどそれをするはずです.

于 2013-02-07T00:26:22.190 に答える