1

Tcl スクリプトと対話できる GUI を Java で作成するのに問題があります。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についても知りましたが、ドキュメントがほとんどないようで、どうすればよいかわかりません。

これに最善のアプローチをする方法について何かアドバイスはありますか? または、追加のリソースはどこにありますか?

4

3 に答える 3

1

私はあなたが言及したJavaライブラリに精通していませんが、

Tcl スクリプトが実行されたときに、この GUI に渡されて表示される情報が必要です。GUI でさらに入力された情報は、スクリプトに戻すことができる必要があります。

あなたのケースはIPCに最適であると述べてください。つまり、Tcl プログラムを開始し、実行中の Java プログラムと Tcl プログラムをある種の IPC 経由で接続し、合意されたプロトコルを使用してそれらの間の交換を行うだけです。

最も単純なクロスプラットフォーム IPC は、TCP ソケットを使用する場合があります。たとえば、Java アプリケーションがループバック インターフェイス アドレスをリッスンしているランダム ポートでソケットを開き、このソケットのアドレスを生成した Tcl アプリケーションに渡します。次に、Tcl アプリケーションがそのソケットに接続し、両方のアプリケーションがコマンドと応答を交換します。

もう 1 つの可能性は、スクリプトをホストする Tcl シェルの標準 IO チャネル (stdin および stdout) を使用してスクリプトと通信することです。Java ホストは、生成された Tcl アプリケーションの stdin にコマンドを書き込み、stdout から出力を読み取ります。この方法はおそらく TCP ソケットより単純ですが、Windows では特別な処理が必要です (後者の場合、標準チャネルがどこにも接続されtclshないため、 を使用してスクリプトを実行する必要があります)。wish

クロスプラットフォームの IPC を必要とせず、外部の Tcl ライブラリを使用しても問題ない場合は、Unix ドメイン ソケットD-BusWindows 名前付きパイプなどのプラットフォーム固有のものを介して通信できます(Unix 名前付きパイプは追加なしで使用できます)。パッケージ)、DDEなど。

于 2012-07-11T07:08:30.597 に答える
1

問題の背景を探していると、問題を説明するこのスレッドが comp.lang.tclで見つかりました。問題は、AWT イベント スレッドから GUI を作成していないことです。Runnableそのためには、 (以下で呼び出されるRunner) を実装し、GUI オブジェクトを作成して表示する小さな Java クラスを作成する必要があります。これをインスタンス化してSwingUtilities.invokeLater、JTcl 経由で起動できます。

java::call javax.swing.SwingUtilities invokeLater [java::new Runner]

hydeただし、 Java コードを Tcl コード内に配置できるパッケージ ( ) を含む JTcl を使用しています。

package require java
package require hyde

hyde::jclass Runner -package your.helper -implements Runnable {
    public void run() {
        your.Frame f = new your.Frame();
        // ...
        f.setVisible(true);
    }
}
java::call javax.swing.SwingUtilities invokeLater [java::new your.helper.Runner]

より明確に文書化されていないのは残念です。jtcllib ドキュメント グループ内にあるため、見落としがちです。

于 2012-07-11T09:03:37.490 に答える
0

Teamcenter は「外部カスタマイズ」をサポートしていません。

GUI を Java で個別に作成し、Teamcenter の内部 API を使用して GUI を表示することになりました。

于 2012-07-16T19:05:54.140 に答える