怎么在一个线程后返回一个结果(具体请进来看)

以下是SearchEquipments.java类计算方法
[code="java"]
public void start(Skill skill){
this.equipmentList.clear();
stopFlag=false;
boolean isequipment;
int[] SID=xml.getSIDByName(skill.getSkillname());
int[] skillNum=skill.getSkillnum();
for(int a=0;a<armsize;a++){
for(int b=0;b<bodysize;b++){
for(int c=0;c<headsize;c++){
for(int d=0;d<legsize;d++){
for(int e=0;e<wstsize;e++){
Equipment equipment=new Equipment(armList.get(a),bodyList.get(b),headList.get(c),legList.get(d),wstList.get(e),SID,skillNum);
isequipment=equipment.isequipment();
if(stopFlag) break;
if(isequipment){

this.equipmentList.add(equipment);
}
this.moveProgressBar(a);
}
}
}
}
}
System.out.println(this.getEquipmentList().size());
this.setButtonIsEnabled(true);
}
[/code]

以下Main.java(开始按钮selection事件)
[code="java"]
new Thread(){
public void run(){
se.start(skill);
}
}.start();
[/code]

如上面所示 我在一个开始按钮上开启一个线程调用一个方法 请问我该如何等待这个线程运行结束并把结果返回到这里来呢 我本来打算单击这个按钮开一个线程 然后把结果返回来显示在界面上 也就是代码必须都写在这个按钮的事件上?希望大大能帮忙解答问题 我该如何做 我用的是swt来做界面的

[quote]不用等线程结束,直接处理结束要做的事情就行

Java代码

//循环结束

Display.getCurrent().asyncExec(new Runnable() {

public void run() {

//显示处理结果

}

};

quote]

可是貌似 Display().getCurrent().asyncExec()前提要看之前Thread有没有Display。。。
LZ debug下吧,我记得以前我用的时候会有NullPointerException

不用等线程结束,直接处理结束要做的事情就行

[code="java"]
//循环结束
Display.getCurrent().asyncExec(new Runnable() {
public void run() {
//显示处理结果
}
};

[/code]

估计没说清楚,就是说把上边那段直接放到你的处理线程里

[code="java"]
public void start(Skill skill){

this.equipmentList.clear();

stopFlag=false;

boolean isequipment;

int[] SID=xml.getSIDByName(skill.getSkillname());

int[] skillNum=skill.getSkillnum();

for(int a=0;a<armsize;a++){

for(int b=0;b<bodysize;b++){

for(int c=0;c<headsize;c++){

for(int d=0;d<legsize;d++){

for(int e=0;e<wstsize;e++){

Equipment equipment=new Equipment(armList.get(a),bodyList.get(b),headList.get(c),legList.get(d),wstList.get(e),SID,skillNum);

isequipment=equipment.isequipment();

if(stopFlag) break;

if(isequipment){

this.equipmentList.add(equipment);

}

this.moveProgressBar(a);

}

}

}

}

}

    //循环结束  
    Display.getCurrent().asyncExec(new Runnable() {   
        public void run() {   
            //显示处理结果   
        }   
    }; 
    System.out.println(this.getEquipmentList().size());  
    this.setButtonIsEnabled(true);  
}

[/code]

先把start()方法 void 改成带返回值 return equipement

如果你的界面很简单只需要2个按钮
那么就用swing的JOptionPane.confirmeDialog很简单,因为它返回的是一个int
ok代表你的start,cancel代表停止或者取消

if(int=0) (貌似是0)代表ok选中,这个时候你直接运行你的start()程序
然后把返回的结果输出到你想要输出的地方

如果你的swt是复杂的界面,还有别的附加功能
那就给button加一个监听器,
button.addListener(SWT.SELECTED,new Listener())然后调用start

PS...我个人觉得实施起来会有问题
因为你有一个stopFlag我没太明白
是不是在start过程当中,按下按钮stop就停止
但你又说要等结束返回值