我问的原因是,我有一个使用 Ruby (1.8.7-p357) 和 Sinatra 框架 (1.3.2) 编写的 Web 应用程序。解释器是 JRuby (1.6.7.2)。我正在连接到 AS/400(System i v6r1),当我在代码中为应用程序提供连接数据库的错误密码时,系统会提示我使用 Java 对话框提供正确的密码。
这在我使用 WEBrick 的开发机器(Ubuntu 11.10)上运行良好。但是,当我使用错误的密码部署应用程序时,应用程序会挂起。翻阅日志文件表明系统正在等待用户调用函数:java.awt.Dialog.show() 的响应。
这是跟踪的相关部分:
http-8080-2" daemon prio=6 tid=0x03d81400 nid=0x10c in Object.wait() [0x06278000]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
- waiting on <0x24a022a8> (a java.awt.Component$AWTTreeLock)
at java.lang.Object.wait(Object.java:503)
at java.awt.WaitDispatchSupport.enter(Unknown Source)
- locked <0x24a022a8> (a java.awt.Component$AWTTreeLock)
at java.awt.Dialog.show(Unknown Source)
at com.ibm.as400.access.PasswordDialog.prompt(PasswordDialog.java:284)
at com.ibm.as400.access.ToolboxSignonHandler.handleSignon(ToolboxSignonHandler.java:499)
at com.ibm.as400.access.ToolboxSignonHandler.connectionInitiated(ToolboxSignonHandler.java:50)
at com.ibm.as400.access.AS400.promptSignon(AS400.java:2153)
at com.ibm.as400.access.AS400.signon(AS400.java:3417)
- locked <0x23121378> (a com.ibm.as400.access.AS400)
at com.ibm.as400.access.AS400.connectService(AS400.java:869)
at com.ibm.as400.access.AS400JDBCConnection.setProperties(AS400JDBCConnection.java:3016)
at com.ibm.as400.access.AS400JDBCDriver.prepareConnection(AS400JDBCDriver.java:1242)
at com.ibm.as400.access.AS400JDBCDriver.initializeConnection(AS400JDBCDriver.java:1105)
at com.ibm.as400.access.AS400JDBCDriver.connect(AS400JDBCDriver.java:355)
Web 应用程序是否可以以这种方式在客户端计算机上启动 Java 对话框?如果是这样,为什么它在我的部署环境中失败了?