Java控制台输入/输出/错误重定向到另一个(Delphi)应用程序

时间:2014-12-29 18:38:21

标签: java delphi delphi-xe6

我正在我的Delphi应用程序中构建一个命令提示符进程,它能够与JDB交互以编译,运行和调试Java应用程序。 Cmd输入/输出/错误是通过从cmd到/从我的Delphi应用程序UI进行流水线操作来处理的。

当使用'System.out'/'System.err'指向我的Delphi应用程序的一个组件时,我想要java程序的输出,我希望从我的delphi应用程序输入发送到'System.in “允许我在我的Delphi UI中构建一个控制台,类似于Eclipse IDE中的控制台。

关于方法的一些想法;

  • Java编译器中的一个模糊标记(我没有找到)允许我重定向
  • 使用'System.setOut'/'System.setErr'/'System.setIn'以及类中的main方法,该类在指向正常的main方法之前执行此初始化以运行用户代码。

注意 - 我已经尝试搜索Eclipse源代码,看看他们是如何做到的,但是因为它是用Java编写的,我怀疑他们不会遇到我将面临的跨语言问题。

1 个答案:

答案 0 :(得分:0)

我找到了解决问题的方法。您需要两个命令提示符进程,每个进程在Delphi中使用读取,写入和错误管道构建。

其中一个运行Java应用程序,并设置为等待在执行之前附加调试器,另一个用于调试并附加到等待的Java应用程序。

这是主要的应用程序;所有应用程序控制台输入/输出/错误都将通过此过程处理。

java -agentlib:jdwp=transport=dt_shmem,address=DelphiExecutingAppAddress,server=y,suspend=y MyClassFile.java

这是针对调试器的;所有jdb控制台输入/输出/错误都将通过此过程处理(断点,恢复,获取对象详细信息)。

jdb -attach DelphiExecutingAppAddress

N.B。也许这就是大卫所指的?在第一次练习中没有找到这个时,看起来我的错误就是读取jdb文档。也许这个帖子可能会帮助别人。