As someone has said before, using chats would depend on your situation. But from my experience (i wrote a jabber client whose main functionality was to chat).
Create a thread when you connect to the jabber server, login to is and retrieve the roster
It maybe good to create a thread when you are retrieving a VCard
You do not need to creat a thread to create a Chat object and send messages through it
Usually, you will prefer to handle the incoming messages in an asynchronous way, by using listeners, so no thread is needed for the incmoming messages.
To create a thread in your case (this is just an example)
public class YourApp extends JFrame
private class YourThread extends Thread
public void run()
//All the variables are accessible here
//Connect to the server
//Log to the server
//Get your roster
//Make your contact tree…