我帮你改了Frame3和A。主要就是把Frame3当作参数传给A,并且把打印a.message放在A里执行。同时Frame3添加打印方法。这是使用线程的通用做法,你以后使用线程也是需要这么做的import javax.swing.*;
import java.awt.*;
import com.borland.jbcl.layout.*;import java.awt.event.*;public class Frame3 extends JFrame {
XYLayout xYLayout1 = new XYLayout();
JButton jButton1 = new JButton();
A a; public Frame3() {
try {
jbInit();
}
catch (Exception ex) {
ex.printStackTrace();
}
} void jbInit() throws Exception {
jButton1.setText("jButton1");
jButton1.addActionListener(new Frame3_jButton1_actionAdapter(this));
this.getContentPane().setLayout(xYLayout1);
this.getContentPane().add(jButton1, new XYConstraints(81, 82, 107, 32));
} public static void main(String[] args) {
Frame3 frame3 = new Frame3();
frame3.setBounds(200, 200, 200, 200);
frame3.show();
} void jButton1_actionPerformed(ActionEvent e) {
a = new A(this);
//a.callB();
a.start();
}
public void printMessage(String message) {
System.out.println(message);
}
}class Frame3_jButton1_actionAdapter implements java.awt.event.ActionListener {
Frame3 adaptee; Frame3_jButton1_actionAdapter(Frame3 adaptee) {
this.adaptee = adaptee;
} public void actionPerformed(ActionEvent e) {
adaptee.jButton1_actionPerformed(e);
}
}/*==============类A===========调用耗时进程和显示窗口===========*/
public class A extends Thread {
Frame3 parent = null;
String message;
B b;
public A(Frame3 fatherFrame) {
this.parent = fatherFrame;
} public void callB() {
System.out.println("Start");
b = new B(this);
b.start();
C c = new C();
(new Thread(c)).start(); try {
b.join();
}
catch (Exception e) { }
c.hideDialog(); } public String getMessage() {
return message;
} public void setMessage(String message) {
this.message = message;
} public void run() {
callB();
parent.printMessage(this.message);
}}