有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java无法在小程序中获取InputStream()

各位

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

我已经通过分散调试消息缩小了bug的范围,直到找到最后一行运行

我试图解析一个参数填充的URL的输出。考虑到浏览器必须以不同于IDE的方式传递这些信息,我尝试了许多不同的方法,包括通过httpsocket发布参数(尽管我不熟悉这种方法,很容易错误地实现)。以下是我当前的版本,忽略了不相关的部分(如果你推断错误可能在忽略的区域,这些很容易被发现):

...
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美元到零

不管怎样,谢谢你的帮助。 恭敬地, 询问


共 (1) 个答案

  1. # 1 楼答案

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

    顺便说一句,你为什么要把这么多的流打包在一起,其中两个流是缓冲的,这是一个巨大的不,仅仅从网络上读取?这两条线可以用

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

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