我在用 Java 编写可以与 Tcl 脚本交互的 GUI 时遇到了一些麻烦。当 Tcl 脚本运行时,我希望将信息传递到此 GUI 并显示。在 GUI 上进一步输入的信息应该能够返回到脚本。
我目前正在使用 Tcl/Java。不幸的是,我使用的是Teamcenter,根据用户手册,不支持Tk工具包。所以我尝试再次使用 Swing。
这就是我试图为 Swing 工作的内容,但是当我运行脚本时没有任何显示:
package require java
java::import javax.swing.JFrame
set window [java::new javax.swing.JFrame]
$window setSize 100 100
$window setVisible true
我还发现了 Swank ,但似乎很少有相关文档,所以我不知道如何继续。
关于如何最好地解决这个问题有什么建议吗?或者在哪里可以找到额外的资源?
最佳答案
我不熟悉你提到的Java库,但从
来看When a Tcl script is run, I want information passed to this GUI and displayed. Further inputted information on the GUI should be able to be returned back to the script.
声明您的案例非常适合IPC 。我的意思是,我只需启动一个 Tcl 程序,通过某种 IPC 连接正在运行的 Java 和 Tcl 程序,然后使用商定的协议(protocol)在它们之间进行交换。
最简单的跨平台 IPC 可能会使用 TCP 套接字:比如说,您的 Java 应用程序在监听某个环回接口(interface)地址的随机端口上打开一个套接字,然后将该套接字的地址传递给它生成的 Tcl 应用程序; Tcl 应用程序然后 connects到该套接字,两个应用程序都会交换命令和响应。
另一种可能性是使用托管它的 Tcl shell 的标准 IO channel (stdin 和 stdout)与脚本进行通信:您的 Java 主机将其命令写入生成的 Tcl 应用程序的 stdin 并从其 stdout 读回其输出。这种方式可能比 TCP 套接字更简单,但需要在 Windows 上进行特殊处理(您必须使用 tclsh
运行脚本,而不是 wish
,因为在后一种情况下,它将有其标准 channel 无处连接)。
如果您不需要跨平台 IPC 并且可以使用外部 Tcl 库,那么您可以通过特定于平台的东西进行通信,例如 Unix-domain sockets , D-Bus , Windows named pipes (Unix 命名管道无需额外软件包即可使用),DDE等等
关于Tcl 的 Java 图形用户界面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11421351/