
Tcl/Tk and Java are siblings in a family of products for programming the Internet.
Tcl is a high-level scripting language. With Tcl you can create small and medium-sized applications incredibly quickly and you can easily glue together existing things. It has a simple syntax and almost no structure, which makes it good for scripting. However, Tcl is an interpreted language so it may not perform well for very large tasks that involve highly iteractive calculations. Think of Tcl as something like the UNIX shells, except that it is embeddable and portable and can be used for Internet scripting.
Java, on the other hand, is a system programming language like C or C++. It is much more structured than Tcl. This means that it takes more code to do basic things in Java, but Java's structures make it easier to build large complex applications. Java is also compiled, which results in greater efficiency, and Java supports multi-threading, whereas Tcl does not.
Tcl/Tk and Java can provide a sort of symbiosis, where Java is great for building new primitives and Tcl/Tk is great for hooking them together into exciting applications.
Here are some examples of how you might use Tcl/Tk and Java either
separately or together:
For simple forms with entries, listboxes, and other standard GUI elements, it's probably easiest to do everything in Tcl/Tk. Basic graphics can also be handled easily with Tk's canvas widget. Tcl/Tk's high level interface makes this sort of thing particularly easy to implement.
If you're building a new Internet protocol or an MPEG decoder, Java is the way to go, since efficiency will be important. Another example where Java might make sense alone is a complex 3-D animated visualization that is a part of a Web page (i.e. it doesn't use traditional GUI widgets). Here both Java's efficiency and its data structuring mechanisms would be useful.
Java and Tcl will work well together for applications that combine the features of the above examples. For example, if a 3-D visualization is surrounded with a GUI containing menus, buttons, dialogs, etc. it will be easiest to implement the calculation part in Java and the GUI part with Tcl/Tk. It might make sense to write the Java parts as a set of Tcl commands so that users can easily script both the Java and the Tcl/Tk parts with Tcl.