在Java中执行URI命令

时间:2011-09-02 17:27:03

标签: java uri

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

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

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

如何让Java“运行”这些?我甚至不知道你叫什么,即你'运行'URI,或'执行'它们,或者什么?因为可能这些URI没有任何东西可以返回,并且Java中的URI类没有任何与“执行”它们相关的内容,但URL会这样做,但它不起作用!< / p>

我试过这个:

...
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,它可以工作。

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

由于

3 个答案:

答案 0 :(得分:7)

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

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

答案 1 :(得分:0)

  

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

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

答案 2 :(得分:0)

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

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

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