Hi Felicity,
Welcome to JavaRanch!
I/O routers are really not the best way to connect a GUI to Jess. They're good for sending printed output to a JTextArea, and connecting a text component to a read-eval loop like the Jess> prompt. But for general programming, it's better to use another mechanism like fetch() and store(), as documented
here. The important thing to remember when you're integrating Jess and Java is that they're not two independent things, running in parallel, waiting for messages from eachother. If main() is written in Java, then no Jess code runs unless you invoke Jess somehow; so sending data to Jess means calling store() to put the information into Jess, and then invoking some Jess code to fetch the value and do something with it. Likewise, from Jess, you use (store) to save some data, and then either invoke a Java method to deal with it, or perhaps simply return from Jess to give control back to Java.
The book "Jess in Action" (see my signature below) spends three chapters on a Swing example, so that's a good resource too.