【问题标题】:Java console Input/Output/Error redirection to another (Delphi) applicationJava 控制台输入/输出/错误重定向到另一个 (Delphi) 应用程序
【发布时间】:2014-12-29 18:38:20
【问题描述】:

我正在我的 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 编写的,我怀疑他们不会遇到我会遇到的跨语言问题。

【问题讨论】:

  • 我已经实现了您建议的问题所描述的(流水线),这是关于 Java System.in/out/err 的去向以及如何将其转发到 Delphi 应用程序。据我所知,流水线需要构建流程才能工作,并且在制作 Java 应用程序时,我无法控制 Java 控制台的构建。此外,流水线使用了我认为在 Java 中不存在任何形式的指针。
  • 操作系统已经提供了你所需要的一切。当一个进程开始时,你提供三个标准句柄。
  • Delphi启动的进程是命令提示符,命令提示符使用JDB编译执行java文件。我不认为我可以按照您描述的方式使用操作系统。

标签: java delphi delphi-xe6


【解决方案1】:

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

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

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

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

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

jdb -attach DelphiExecutingAppAddress

注意也许这就是大卫所指的?看起来这是我在阅读 jdb 文档时的错误,因为在第一次工作中没有找到它。也许这个帖子可以帮助其他人。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-04
    • 1970-01-01
    • 1970-01-01
    • 2019-12-01
    • 2014-03-17
    • 1970-01-01
    • 2010-11-05
    • 1970-01-01
    相关资源
    最近更新 更多