2

我有一个 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();
}

关于如何完成我想做的事情的任何想法?甚至可能吗?

4

2 回答 2

0

Tcl 本身不能显示 GUI。它为此使用了一个名为 Tk 的插件。
在 Tcl 的 C 参考实现中,您也可以得到 Tk。
Tk 没有移植到 Java,Tcl 有。

您不能使用 Jacl 来显示 Tk 小部件,但TclBlend可以这样做,因为 TclBlend 使用 Tcl 的 C 参考实现。这意味着用户需要一个有效的 Tcl/Tk 安装。

TclBlend 和 Tcl > 8.5 through 存在一些问题,这会导致段错误。
IIRC,您必须删除 TclBlends C 代码中的条件ifTcl_FindNameOfExecutable并自己编译)。

于 2013-04-17T21:46:19.290 回答
0

转到此站点http://jtcl-project.github.io/jtcl/并立即下载二进制 zip。它最近在 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
于 2014-12-10T00:01:58.853 回答