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

我相信你可以。我会尝试如下。

在调用 main 之后,您需要运行一个循环来访问您感兴趣的 Window(可以在单独的线程中完成)。

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 回答