何かが足りないので、呼び出し可能に基づいてcalsを作成し、GUIでインスタンスを作成し、アクションが実行されたときにそれを呼び出しました。唯一のことは、プロセスが同じスレッドで実行されているためGUIが応答せず、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はGUIと同じスレッドで実行され、クリックできるものはなく、jTextAreaConsoleはプロセスが終了するまで更新されません。誰かが私がこれをどのように実装すべきかについてアドバイスを提供できますか?