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

Java控制台输入/输出/错误重定向到另一个(Delphi)应用程序,java,delphi,delphi-xe6,Java,Delphi,Delphi Xe6,我正在我的Delphi应用程序中构建一个命令提示符进程,它能够与JDB交互以编译、运行和调试Java应用程序。Cmd输入/输出/错误通过从Cmd到我的Delphi应用程序UI的管道处理 我希望在使用'System.out'/'System.err'时,java程序的输出被定向到我的Delphi应用程序的一个组件,我希望我的Delphi应用程序的输入被发送到'System.in',允许我在Delphi UI中形成一个控制台,类似于Eclipse IDE中的控制台 关于方法的几点思考 Java编译

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

我希望在使用'System.out'/'System.err'时,java程序的输出被定向到我的Delphi应用程序的一个组件,我希望我的Delphi应用程序的输入被发送到'System.in',允许我在Delphi UI中形成一个控制台,类似于Eclipse IDE中的控制台

关于方法的几点思考

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

注意:我曾尝试搜索Eclipse源代码以了解他们是如何做到这一点的,但由于它是用Java编写的,我怀疑他们不会面临我将面临的跨语言问题。

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

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

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

java -agentlib:jdwp=transport=dt_shmem,address=DelphiExecutingAppAddress,server=y,suspend=y MyClassFile.java
这是用于调试器的;所有jdb控制台输入/输出/错误都将通过此过程处理(断点、恢复、获取对象详细信息)


注意,也许这就是大卫所指的?在阅读jdb文档时,在第一次工作中没有找到这一点,这似乎是我的错误。也许这个线程可以帮助其他人。

可能重复我已经实现了您建议的问题所描述的(管道),这是关于Java System.in/out/err的方向以及如何将其转发到Delphi应用程序。据我所知,管道需要流程的构造才能正常工作,而当我制作Java应用程序时,我无法控制Java控制台的构造。此外,管道使用指针,我认为Java中不存在任何形式的指针。操作系统已经提供了您所需要的一切。当一个进程启动时,您提供三个标准句柄。由Delphi启动的进程是命令提示符,命令提示符使用JDB编译和执行java文件。我认为我不能像你描述的那样使用操作系统。
jdb -attach DelphiExecutingAppAddress