以下是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就停止
但你又说要等结束返回值