임이 누락되었습니다. callable을 기반으로 캘린더를 만들고 gui에서 인스턴스를 만들고 작업이 수행 될 때 호출합니다. 유일한 것은 프로세스가 동일한 스레드에서 실행되고 GUI에 액세스하기 전에 프로세스가 완료 될 때까지 기다려야하므로 GUI가 응답하지 않는다는 것입니다. 여기에 코드의 일부는 다음과 같습니다자바 호출 가능 스레드 스윙 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는 여전히 GUI 아무것도 같은 trhead에서 실행되는
결과는 클릭하고 jTextAreaConsole 나던 업데이트 :
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에
프로세스가 완료 될 때까지 아무도 내가 이것을 구현해야하는 방법에 대한 조언을 할 수 있습니까?
장기 실행 작업을위한'SwingWorker'를 구현하십시오. 자세한 내용은 [동시성의 동시성] (http://docs.oracle.com/javase/tutorial/uiswing/concurrency/)을 참조하십시오. –
귀하의 호출 가능 번호는'Callable'입니다. 그렇다면'String result = blah.call()'을하십시오. 어느 쪽이되어야 하는가? –
Brian
@Brian 그냥 부울 결과가 있어야합니다. – ubergam3r