我有一个TCL文件,它使用Tcl的BWidget包,我一直使用它作为我的程序的图形用户界面。我现在希望能够从一个单独的Java程序加载这个GUI。我研究过Jacl和Swank,但它们似乎并不完全符合我的要求。
我尝试使用Jacl执行以下操作,但无法评估该文件。在调试时,我可以看到它完成了对tcl文件的解析,但在解析BWidget包tcl文件时抛出了异常。下面是我的Java代码:
Interp interp = new Interp();
try {
interp.evalFile("C:\\CTP\\Tcl\\LuxonCtp32.tcl");
} catch (TclException ex) {
int code = ex.getCompletionCode();
System.err.println("command returned bad error code: " + code);
} finally {
interp.dispose();
}关于如何完成我想做的事情,你有什么建议吗?这有可能吗?
发布于 2013-04-18 05:46:19
Tcl本身不能显示GUI。它使用了一个名为Tk的插件。
在Tcl的C参考实现中,你也可以得到Tk。
Tk还没有移植到Java,而Tcl已经移植到了Java。
您不能使用Jacl来显示Tk小部件,但TclBlend可以这样做,因为TclBlend使用Tcl的C参考实现。这意味着用户需要一个可以工作的Tcl/Tk安装。
TclBlend和Tcl >8.5through存在一些问题,这会导致段故障。
IIRC你必须在TclBlends C代码中删除Tcl_FindNameOfExecutable周围的条件if (然后自己编译)。
发布于 2014-12-10 08:01:59
请访问此站点http://jtcl-project.github.io/jtcl/并立即下载二进制压缩包。它是github上最新的名为Jtcl的java tcl。解压它,您将找到一个名为jtcl-2.7.0.jar的jar。我使用的是我喜欢的Netbeans 8。我将jar添加到Project Library中。我创建了一个名为JTclHallo.java的java文件,代码如下。
package jtclhallo;
// import tcl.lang it belongs to jtcl-2.7.0 jar a must
import tcl.lang.*;
// Java wrapper to test JACL or JTCL.
public class JTclHallo {
public static void main(String []args) {
//Interp is a java class belonging to tcl.lang. Unrar the jtcl-2.7.0
Interp i = new Interp();
try {
//call your tcl file mine was swing.tcl from the E drive
i.eval("source E:/private/swing.tcl");
} catch (TclException e) {
System.out.println("Exception: " + e.getMessage());
}
}
}对于swing.tcl
package require java
set window [java::new javax.swing.JFrame]
$window setSize 600 400
$window setVisible truehttps://stackoverflow.com/questions/16070675
复制相似问题