java:runtime.getRuntime().exec() - 如何参考启动程序Jframe



在这样启动这样的Java程序时(或等效):

Runtime.getRuntime().exec("java -jar someJar.jar")

是否可以参考启动程序的Jframe,以便可以通过诸如Fest(例如测试中)之类的图书馆自动化?

如下所示,当程序在同一VM内启动时很容易执行此操作,但是由于几个原因,我无法做到这一点。程序必须与启动的VM/进程分开,如上所述或类似。但是,当使用上述代码启动该过程时,下面的fest代码找不到框架。

示例使用fest与Java反射的改编代码。运行外部罐子并参考其类?:(FrameFixture只是JFrame的自动化包装器):

Thread t = new Thread(new Runnable() {
    public void run() {
        File file = new File("someJar.jar");
        URLClassLoader cl;
        try {
            cl = new URLClassLoader( new URL[]{file.toURI().toURL()} );
        }
        catch (MalformedURLException e) {}
        Class<?> clazz = null;
        try {
            clazz = cl.loadClass("Main");
        }
        catch (ClassNotFoundException e) {}
        Method main = null;
        try {
            main = clazz.getMethod("main", String[].class);
        }
        catch (NoSuchMethodException e) {}
        try {
            main.invoke(null, new Object[]{new String[]{}});
        }
        catch (Exception e) {}
    }
});
t.start();
GenericTypeMatcher<JFrame> matcher = new GenericTypeMatcher<JFrame>(JFrame.class) {
    protected boolean isMatching(JFrame frame) {
        return "TestFrame".equals(frame.getTitle()) && frame.isShowing();
    }
};
FrameFixture frame = WindowFinder.findFrame(matcher).using(BasicRobot.robotWithCurrentAwtHierarchy());
frame.maximize();

不,您无法在另一个过程中获得对Jframe的引用。当您使用Runtime.exec()

要完成您想要的目标,您可以创建一个类似JMX的接口,该接口接受命令,该命令可以在过程中执行操作或从该过程中报告信息。

相关内容

  • 没有找到相关文章

最新更新