林失去了一些东西,我已经创建了一个基于可调用,在我的GUI创建一个实例,把它当执行一个动作CALSS。唯一的一点是,该GUI没有响应的过程是相同的线程上运行,并且必须等待它完成之前,我可以访问GUI。下面是一些代码:Java的可赎回线程Swing GUI的
public class MYProject {
public static class CreateProject implements Callable<Boolean>{
private String m_url;
private String m_project;
private String m_options;
public CreateProject(String url, String project, String options){
m_url = url;
m_project = project;
m_options = options;
}
public Boolean call(){
Boolean result = true;
try {
if (os.toLowerCase().contains("windows")){
command = windowsCMD + command;
}
String line;
Process p = Runtime.getRuntime().exec(command);
InputStreamReader isr = new InputStreamReader(p.getInputStream());
BufferedReader bri = new BufferedReader(isr);
try {
while ((line = bri.readLine()) != null) {
if(line.startsWith("ERROR")){
System.out.println(line);
result = false;
break;
}
}
p.waitFor();
}
finally {
bri.close();
}
}
catch (Exception err) {
System.err.println("Unable to create project: " + err.getMessage()
+ "\n");
result = false;
}
return result;
}
}
}
,并在GUI:
private void jButtonRefreshActionPerformed(java.awt.event.ActionEvent evt) {
jTextAreaConsole.append("Creating project.\n");
MYProject.CreateProject blah = new MYProject.CreateProject("url", "project", "options");
String result = blah.call();
jTextAreaConsole.append("Project creation successful: " + result);
}
的结果是进程p仍然在同一trhead作为GUI并没有什么运行是可以点击和jTextAreaConsole犯规更新在过程结束后,直至完成。任何人都可以就我应该如何实施这个提供一些建议吗?
实现长时间运行任务的'SwingWorker'。有关更多详细信息,请参见[Swing中的并发](http://docs.oracle.com/javase/tutorial/uiswing/concurrency/)。 –
你调用是'赎回'但你做'字符串结果= blah.call()'。它应该是哪一个? –
Brian
@布赖恩刚我messign了剪切和粘贴的东西应该ahve了布尔结果。 – ubergam3r