繁体   English   中英

从在另一个Java程序中运行的Java程序获取I / O

[英]Getting I/O from a java program running in another java program

我有两个Java程序,分别称为A和B。A看起来像这样

Scanner deusex = new Scanner(System.in);
ArrayList<String> list = new ArrayList<String>();
String again = "Y";

while (again == ("Y"))
{
out.println("Enter a string.");
String user1 = deusex.next();
list.add(user1);
 out.println("Input again? [Y/N]");
        again = deusex.next();
        if (again.equalsIgnoreCase("Y"))
        again = "Y";

}
out.println("Your elements: " + list);
out.println("Delete elements? [Y/N]");
String y = deusex.next();

if (y.equalsIgnoreCase("y"))
{ 
String again1 = "Y";
out.println("Printing outputs...");
  out.println(list);
while (again1 == ("Y"))
{
out.println("Enter index of element to delete [0,1,2...]");
  int user3 = deusex.nextInt();
  list.remove(user3);
  out.println("Printing outputs...");
  out.println(list);
   out.println("Input again? [Y/N]");
        again = deusex.next();
        if (again.equalsIgnoreCase("Y"))
        again1 = "Y";
        else System.exit(0);
}
}
else { out.println("Bye."); };
}

}

我已将.txt文件中的A上传到了Google驱动器。 编写我的程序B来下载文件,然后将其另存为.java文件。 然后,我编译它并尝试运行它。 这是代码B的重要部分:

System.out.println("Enter anything to compile and run.");
String anything1 = Gooch.next();
String line = null;
try 
{ 
Process pleasecompile = new ProcessBuilder("javac", "A.java").start();
Process pleaserun = new ProcessBuilder("java", "A").start();
BufferedReader input = new BufferedReader(new InputStreamReader(pleaserun.getInputStream()));
BufferedWriter output= new BufferedWriter(new OutputStreamWriter(pleaserun.getOutputStream()));
while ((line = input.readLine()) != null) {
    System.out.println(line);
    output.write(300);
    }
pleaserun.waitFor();
input.close();
}
catch (Exception e) 
{
  e.printStackTrace();
  }

为B运行此代码只会打印出A的第一行。我希望能够完整地运行A并获取并提供输入和输出。 到目前为止,我已经弄清楚需要通过一些循环或进程来操作缓冲的读取器,但是我不知道该如何做。

我知道,如果我仅使用Process pleasecompile编译A.java,则以后可以使用类似A.main(String [0]);的类直接调用该类。 问题是A.class文件在编译时才存在,只有在下载并编译完之后才存在,所以我的B程序给我一个A.main编译时找不到符号错误的提示。 我的问题是,如果不求助于读者,我是否可以设置一些东西来在B中编译A之后没有错误地为我调用该类。

我的建议是使用反射。 按照代码类别B可以编译并运行。 当B运行时,pleaseCompile方法将编译类A。为什么不进行反射,该反射用于在运行时加载类。

您可能可以访问此链接tutorials.jenkov.com/java-reflection/dynamic-class-loading-reloading.html关于反射的冷杉教程

暂无
暂无

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

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