【问题标题】:Executing URI commands in Java在 Java 中执行 URI 命令
【发布时间】:2011-09-02 17:27:02
【问题描述】:

Steam 允许用户启动游戏和执行许多其他操作的一种方式是使用 URI 协议,例如(来自Valve developer community):

steam://run/<id>会启动指定ID对应的游戏。

steam://validate/<id>会验证指定ID的游戏文件。

我怎样才能让 Java '运行'这些?我什至不知道你怎么称呼它,即你是“运行”URI,还是“执行”它们,还是什么?因为大概这些 URI 没有任何可以返回的内容,并且 Java 中的 URI 类没有任何与“执行”它们相关的内容,但是 URL 有,但它不起作用!

我试过了:

...
try
{
    URI testURI = URI.create("steam://run/240");
    URL testURL = joinURI.toURL();
    // URL testURL = new URL("steam://run/240") doesn't work either
    joinURL.openConnection(); // Doesn't work
    // joinURL.openStream() doesn't work either
}
catch (MalformedURLException e)
{
    System.err.println(e.getMessage());
}
...

每个组合都会给出错误:unknown protocol: steam

Steam 用来处理 URI 的系统肯定是可以工作的,因为例如,我可以在 Firefox 中输入上面的 URI 并且它可以工作。

我永远感谢提供答案的人!

谢谢

【问题讨论】:

    标签: java uri


    【解决方案1】:

    尝试Desktop.browse(URI),这应该启动“默认操作”,即steam:// URI 的 Steam 客户端,例如

    URI uri = new URI("steam://store/240");
    if (Desktop.isDesktopSupported()) {
        Desktop.getDesktop().browse(uri);
    }
    

    【讨论】:

      【解决方案2】:

      Steam 用来处理 URI 的系统肯定是可以工作的,因为例如,我可以在 Firefox 中输入上面的 URI 并且它可以工作。

      它之所以有效,是因为 Firefox(或其他浏览器)可以将未知协议与应用程序相关联。当您第一次加载steam://xxx 时,Firefox 会询问您要打开哪个应用程序。如果它没有问你,steam 可能为此安装了浏览器插件。

      【讨论】:

      • 好的,那么 Firefox 是如何确定如何处理它的,以及如何在 Java 中完成呢?
      • 查看我上面的答案——Firefox 只是指操作系统,它反过来启动steam:// 的注册协议处理程序,它在安装时恰好是 Steam 客户端(如果不是,它可能会导致错误或无操作)。
      【解决方案3】:

      Uniform Resource Identifier (URI) 只是标识资源,不一定描述如何访问它。此外,对于自定义协议,例如“steam”,供应商可以定义兼容的客户端程序必须知道才能进行交互的任何底层访问约定。

      为了“执行”这样的 URI,您需要确切了解协议是如何实现的(是通过 HTTP 吗?TCP?UDP?)以及如何与另一端的服务器通信。

      Valve Developer Community wiki page 可能有一些有用的信息。

      【讨论】:

        猜你喜欢
        • 2017-01-26
        • 1970-01-01
        • 2012-10-09
        • 2016-02-29
        • 2011-06-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多