繁体   English   中英

将对象作为参数传递给ProcessBuilder?

[英]Pass object as parameter in ProcessBuilder?

我想将两个或多个对象作为参数传递给ProcessBuilder,以将程序作为单独的进程运行。 我尝试了以下代码,但是它不起作用。

public static int exec(FTP ftp, Stage stage) throws IOException,
                                               InterruptedException {
        String javaHome = System.getProperty("java.home");
        String javaBin = javaHome +
                File.separator + "bin" +
                File.separator + "java";
        String classpath = System.getProperty("java.class.path");
        String className = Test.class.getCanonicalName();

        ProcessBuilder builder = new ProcessBuilder(
                javaBin, "-cp", classpath, className+" "+ftp+" "+stage);

        Process process = builder.start();
        process.waitFor();
        return process.exitValue();
    }

这是Test.class

public class Test extends Application
{
    String lol = "000";
    public Test(FTP ftp, Stage stage)
    {
        // The logic goes here for those passed parameter
        System.out.println("This is Test");
    }

    @Override
    public void start(Stage arg0) throws Exception 
    {
        // TODO Auto-generated method stub
        arg0.setTitle("Hello there");
        arg0.setWidth(200);
        arg0.setHeight(200);

        arg0.setScene(new Scene(new Pane(new Label(lol)),1000,1000));
        arg0.show();
    }
}

这里Test类没有执行,但是如果我删除了这两个参数,那么只有它起作用。 有人可以告诉我如何将对象作为参数传递吗?

当您启动一个新进程时,它不会与父进程共享任何数据。 这与从命令行调用子进程相同。

您可以提供给子进程的唯一信息是该进程接受(理解)为调用参数的信息并且必须将其作为字符串提供。 子进程需要解释调用参数,并通过解析它们来创建所需的对象。

就您而言-您需要提供有关ftpstage所有重要信息,以便新进程可以重新创建实例。 即使这样,它们仍将是新流程所拥有的全新对象,而与父流程的对象无关。

不,您不能跨进程边界传递实例对象(好吧,有共享内存,但是您不能在Java中使用它,而且在C语言中通常也不是正确的解决方案)。 您可以做的是在进程之间传递消息 命令行参数是一种方法,但是正如您所发现的,它们仅限于可以序列化为字符串的数据。

另一个选择是在子进程中序列化对象并反序列化它们。 例如,您可以打开一个从父对象到子对象的stdinObjectOutputStream ,并通过该对象发送任意复杂的对象。 但是,您在另一侧获得的对象仍将是副本,但其对象标识与父进程中的对象不同。

仅当您要将Java程序作为单独的进程运行时,ProcessBuilder才能为您提供帮助。 无法将对象参数传递到ProcessBuilder中。 在两个不同的过程之间,您不能直接传递参数。 为此,您可以将那些对象存储到文件中,也可以通过管道传递对象。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM