我正在运行一个在其操作中多次运行外部Java程序的工具。外部工具以在JFrame中打开JOptionPane开始。
这是我写的一个测试脚本,试图解决我的问题。
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();
}
}
}
答案 0 :(得分:0)
找到我自己的问题;由于备份文件使用格式yyyy-MM-dd hh-mm-ss
,并且在同一秒内保存的文件导致FileAlreadyExists
异常,这意味着只有第一个完成保存的文件允许程序继续运行。
暂停1秒会导致文件具有不同的保存名称,因此不会发生错误。
暂停1秒会导致某些文件名重叠,但也会出现一些不同的名称,因此会出现一些文件。
解决方案:更改名称格式(即包括毫秒),或在if语句中包含备份函数,如果具有相同时间的文件已存在,则忽略该函数。
(同样;感谢@ErwinBolwidt,鼓励我正确地格式化我的问题,我意识到我的代码中的问题不是我认为的那样)。