测试JCTerm,java applet终端模拟器,可以在Eclipse中运行,但不能在浏览器中运行

时间:2011-05-21 14:55:14

标签: java applet jsch appletviewer

测试未修改版本的JCTerm(终端模拟器,可以用作applet;我想使用applet功能),一切似乎在Eclipse的AppletViewer中正常工作,但在网页中测试生成的jar文件,所有选项都会显示一个带有闪烁黄色警告符号的消息框,并且不执行任何操作。某些选项显示“在此设置之前建立连接”错误。

我感兴趣的选项是“文件”菜单中的“打开SHELL会话...”。在尝试“打开SHELL会话...”选项时,applet的Java控制台显示这些东西,这似乎是直接相关的。我不知道它意味着什么。

    network: Connecting http://xxx.xx.xx.xxx/crossdomain.xml with proxy=DIRECT
    network: Connecting http://xxx.xx.xx.xxx:80/ with proxy=DIRECT
    java.security.PrivilegedActionException: java.net.ConnectException: Connection refused: connect
        at java.security.AccessController.doPrivileged(Native Method)
        at com.sun.deploy.net.CrossDomainXML.check(Unknown Source)
        at com.sun.deploy.net.CrossDomainXML.check(Unknown Source)
        at sun.plugin2.applet.Applet2SecurityManager.checkConnect(Unknown Source)
        at java.net.Socket.connect(Unknown Source)
        at java.net.Socket.connect(Unknown Source)
        at java.net.Socket.<init>(Unknown Source)
        at java.net.Socket.<init>(Unknown Source)
        at com.jcraft.jsch.Util$1.run(Util.java:354)
        at java.lang.Thread.run(Unknown Source)
    Caused by: java.net.ConnectException: Connection refused: connect
        at java.net.PlainSocketImpl.socketConnect(Native Method)
        at java.net.PlainSocketImpl.doConnect(Unknown Source)
        at java.net.PlainSocketImpl.connectToAddress(Unknown Source)
        at java.net.PlainSocketImpl.connect(Unknown Source)
        at java.net.SocksSocketImpl.connect(Unknown Source)
        at java.net.Socket.connect(Unknown Source)
        at sun.net.NetworkClient.doConnect(Unknown Source)
        at sun.net.www.http.HttpClient.openServer(Unknown Source)
        at sun.net.www.http.HttpClient.openServer(Unknown Source)
        at sun.net.www.http.HttpClient.<init>(Unknown Source)
        at sun.net.www.http.HttpClient.New(Unknown Source)
        at sun.net.www.http.HttpClient.New(Unknown Source)
        at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(Unknown Source)
        at sun.net.www.protocol.http.HttpURLConnection.plainConnect(Unknown Source)
        at sun.net.www.protocol.http.HttpURLConnection.connect(Unknown Source)
        at com.sun.deploy.net.CrossDomainXML$2.run(Unknown Source)
        ... 10 more    

此程序正常工作的示例可在此处找到,http://wiredx.net/jcterm/

2 个答案:

答案 0 :(得分:1)

我是jcterm的作者。 http://wiredx.net/jcterm/处的jar文件已经过数字签名。 因此,如果您将这些文件复制并安装到您的Web服务器中,它将起作用。

答案 1 :(得分:0)

这看起来像是一个安全问题。

默认情况下,未签名的Java小程序只能在加载时连接到主机。此外,如果您要连接的主机允许使用它的crossdomain.xml文件,您还可以连接到其他主机。

从堆栈跟踪判断,您希望连接到没有HTTP服务器的主机,因此无法提供crossdomain.xml文件。出于这个原因,你在这里得到了这个例外。

有以下方法:

  • 稍后将applet放在要连接的同一Web服务器上。 (每个applet都可以连接到自己的主机。)
  • 让SSH服务器拥有一个带有crossdomain.xml的最小Web服务器。 (crossdomain.xml必须允许来自applet服务器的内容访问此服务器。)
  • 签署applet(并让用户信任它)。 (签名和受信任的applet可以做任何事情。)

您链接的official WiredX sample applet使用最后一种方法,这就是为什么即使连接到您的服务器也能正常工作。