1

每个人,

我正在尝试用 Java 编写一个小程序,它将访问视频游戏的应用程序编程接口 (API),虽然我可以通过 Eclipse IDE 成功运行小程序,但从浏览器运行时它始终挂起。

我已经通过分散调试消息来缩小错误的位置,直到找到最后一行运行。

我正在尝试解析来自参数填充 URL 的输出。确定浏览器必须以不同于 IDE 的方式传递此信息,我尝试了许多不同的方法来执行此操作,包括通过 http 套接字 POST 参数(尽管我不熟悉这种方法并且很容易错误地实现它)。下面是我当前的版本,省略了无关的部分(如果你应该推断错误可能在省略的区域,这些很容易被发现):

...
URL apiCharList = null;
...
try {
    ...
    apiCharList = new URL("https:// ... ");
    URLConnection connection = apiCharList.openConnection();
    connection.connect();
    DataInputStream in = new DataInputStream( new BufferedInputStream( connection.getInputStream() ) );
    BufferedReader br = new BufferedReader( new InputStreamReader( in ) );
    String line = br.readLine();
    while( line != null ) {
        ...
        line = br.readLine();
    }
    ...
} catch (MalformedURLException e) {
    current.setText( "Malformed URL" );
} catch (IOException e) {
    current.setText( "InputStream fail." );
}

我的调试让我失望了:

connection.connect();

没有那条线,在:

DataInputStream in = new DataInputStream( new BufferedInputStream( connection.getInputStream() ) );

对此问题的任何见解都将受到高度赞赏。同样,只需让我知道是否/哪些省略的区域可能需要查看。

恭请,求问

更新

谢谢大家的回复。我的 BufferedReader 现在初始化为:

= new BufferedReader( new InputStreamReader( connection.getInputStream() ), 1 );

作为我尝试过的所有各种方法的组合,那部分已经被跳跃起来了。谢谢你帮我解决了。从我所看到的来看,问题似乎是我的小程序需要进行数字签名,以便在通过浏览器运行时建立所需的连接。我一直在研究这个问题,并且在下载最新的 JDK 后遇到了 keytool 和 jarsigner 的问题。我只接触了一段时间,之前从未有过数字签名的小程序,但至少我有一条新的途径可以追求。如果有人能提供关于如何对小程序进行数字签名的良好(最新)演练,那将不胜感激。我读过的各种东西都说它可以花费我 40 美元到 20 美元到零?

无论如何,感谢您克服这个障碍。尊敬的,询问

4

1 回答 1

2

默认情况下,浏览器不允许小程序在除了它们自己的源服务器之外的任何地方建立网络连接。您需要对小程序进行数字签名,然后请求用户允许建立连接。另一种方法是在您的 Web 服务器上运行一个简单的代理 servlet,applet 可以使用它与第三方服务器通信。

顺便说一句,你为什么要在彼此周围包装这么多流——其中两个是缓冲的,这是一个巨大的禁忌——只是为了从网络中读取?这两行可以替换为

BufferedReader br = new BufferedReader( new InputStreamReader( connection.getInputStream() ), 1 );

请注意,我最后插入了“,1”,这会关闭 BufferedReader 的缓冲。您不想在网络连接上提前阅读,或者您正在邀请您的代码挂起。

于 2011-04-22T03:42:19.223 回答