Two problems here:
Code:
Calculator calc = new Calculator(this);
PiGUI() {
// Frame listener - closeing window
addWindowListener(new WindowAdapter() {public void windowClosing(WindowEvent e) {System.exit(0);}});
The constructor of Calculator calls start(), which is an infinite loop. The Calculator constructor is called when the PiGUI is created, which causes the program to loop before the gui is even created. Replace "Calculator calc = new Calculator(this);" with just "Calculator calc;". Then do "calc = new Calculator(this);" in your constructor after you show the window.
The second problem is very minor, instead of "addWindowListener(new WindowAdapter() {public void windowClosing(WindowEvent e) {System.exit(0);}});", use "setDefaultClosingOperation(JFrame.EXIT_ON_CLOSE);".
Also, while fixing your problem, beware of the Swing with threads problem. Whenever you use Swing/AWT, new threads are created. Modifying Swing gui objects outside of the gui event thread (like in the main thread) will cause hard to detect problems. Any calling of setText() after the window is already visible needs to be done in the event thread, like this:
Code:
SwingUtilities.invokeLater(new Runnable(){
public void run(){
//insert gui code like setText() here
}
});