我正在運行一個在其操作中多次運行外部Java程序的工具。外部工具首先在JFrame內打開一個JOptionPane。程序在快速運行時解散步驟(Java)
這是我寫的一個測試腳本,試圖解決我的問題。
import java.io.File;
public class Test {
public static void main(String[] args) throws Exception {
for(int i=0; i<6; i++) {
//Thread.sleep(1000);
String toRun = "java -jar \"" + "C:\\Folder\\File.jar" + "\" " + i;
Runtime.getRuntime().exec(toRun, null, new File("C:\\Folder"));
}
}
}
當這個運行時,只有最後運行的JOptionPane的(I = 5)出現,但似乎其他人「試圖」以顯示爲窗格似乎被打開和關閉立即。
然而,當我取消Thread.sleep代碼,所有單獨的窗格開放的。如果我將睡眠設置爲300(0.3秒),則會出現大約一半的窗格,通常是第一個和最後一個。
我想找到一種方法來運行外部程序的所有實例完全無需可言,如果可以使用Thread.sleep()方法。
編輯:根據要求,我也簡化了我的外部程序。
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
public class File {
static JFrame frame = new JFrame("Frame");
private static String doc1Address = "C:\\Folder\\doc1.csv";
private static String doc2Address = "C:\\Folder\\doc2.csv";
public static void main(String[] args) throws Exception {
if(args.length == 1) {
SimpleDateFormat form = new SimpleDateFormat("yyyy-MM-dd hh-mm-ss");
Date date = new Date();
String currentDate = form.format(date);
//Save Backup of doc1
String doc1BackAddress = doc1Log.substring(0, doc1Log.length()-15) + "doc1Back " + currentDate + ".csv";
Path todoc1 = Paths.get(doc1Address);
Path todoc1Back = Paths.get(doc1BackAddress);
Files.copy(todoc1, todoc1Back);
Files.setAttribute(todoc1Back, "dos:readonly", true);
//Save Backup of doc2
String doc2BackAddress = doc2Log.substring(0, doc2Log.length()-16) + "doc2Back " + currentDate + ".csv";
Path todoc2 = Paths.get(doc2Address);
Path todoc2Back = Paths.get(doc2BackAddress);
Files.copy(todoc2, todoc2Back);
Files.setAttribute(todoc2Back, "dos:readonly", true);
//Format JFrame
frame.pack();
frame.setLodoc1ionRelativeTo(null);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
JOptionPane.showMessageDialog(frame, args[0]);
frame.dispose();
}
}
}
它們應該平行還是一個接一個地運行? – RealSkeptic
平行。當包含睡眠功能時,所有6個窗格會快速連續出現,因此所有6個窗格都立即顯示在屏幕上,並且該程序的以下功能並行運行。 – Dant
一個接一個地運行它們有什麼問題? – notyou