我有一个TCL文件,它使用Tcl的BWidget包,我一直用它作为我的程序的GUI。我现在希望能够从单独的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();
}
关于如何实现我想做的事情的任何想法?它甚至可能吗?
答案 0 :(得分:0)
Tcl本身无法显示GUI。它使用了一个名为Tk的插件。
在Tcl的C参考实现中,你也得到了Tk
Tcl还没有移植到Java。
你不能使用Jacl来显示Tk小部件,但TclBlend可以这样做,因为TclBlend使用Tcl的C参考实现。这意味着用户需要安装Tcl / Tk。
TclBlend和Tcl存在一些问题> 8.5到,导致段错误
IIRC您必须删除TclBlends C代码中if
周围的条件Tcl_FindNameOfExecutable
(并自行编译)。
答案 1 :(得分:0)
转到此网站http://jtcl-project.github.io/jtcl/并立即下载以获取二进制邮箱。它是github上最近的一个名为Jtcl的java tcl。 解压缩它,你会发现一个名为jtcl-2.7.0.jar的jar。 我正在使用Netbeans 8。 我将jar添加到项目库中。 我创建了一个名为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 true