【问题标题】:How does a native calling application get a return value from JNLP?本地调用应用程序如何从 JNLP 获得返回值?
【发布时间】:2017-02-20 23:02:02
【问题描述】:

我正在从本机客户端应用程序(即不是浏览器)启动 JNLP java 应用程序。当 JNLP 完成它的任务时,我需要它向调用应用程序返回一个字符串吗?我怎样才能做到这一点?是否可以将值返回给调用应用程序 - 或者我是否需要让调用应用程序在端口上侦听并让 JNLP 应用程序通过套接字将值写入该端口?

【问题讨论】:

  • 拜托,你能举个例子说明你是怎么打电话的吗?
  • @karelss - javaws 在 C# 中由 Process::Start 调用

标签: java client jnlp


【解决方案1】:

如果指定了 all-permissions 元素,您可以尝试设置一个可以从 C# 应用程序中读取的环境变量。

在Java中设置环境变量:

System.getenv().put("returnValue", "yourValue");

在 C# 中读取环境变量:

ProcessStartInfo p = new ProcessStartInfo("start ....");
....
string returnValue = p.EnvironmentVariables["returnValue"];

【讨论】:

  • 不要认为这会起作用 - child 是一个单独的进程 - 它继承了 parent 的 env 变量的副本 - child 中变量值的任何更改都不会反映在 parent - 至少这是它在大多数操作系统上的工作方式 - 将在 Windows 上对其进行测试并查看。
【解决方案2】:

我喜欢您使用套接字的想法,并认为这可能是一个简单的解决方案。

无法从 WebStart 应用程序获取返回值。只需查看来自

的帮助消息
javaws --help

没有可用的返回码。 (对不起)

您是否考虑过使用临时文件而不是套接字?

【讨论】:

    【解决方案3】:

    它有点旧,但据我所知,这是两个进程 link 相互通信的现有选项。

    我认为解决您的问题最简单的方法是使用 rmi,或者如果可以的话,使用 jmx,或者只是一个简单的套接字

    【讨论】:

      【解决方案4】:

      回答我自己的问题!

      我从子进程(JNLP)写入标准输出

      • 父进程启动子进程

        Process::Start
        
      • 从父级读取标准输出

        string ret = process.StandardOutput.ReadToEnd();
        
      • Process::WaitForExit();
        

      有人认为这有什么问题吗?

      【讨论】:

        猜你喜欢
        • 2017-06-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-30
        • 1970-01-01
        • 2014-10-08
        相关资源
        最近更新 更多