2017-08-15 55 views
0

我正在運行一個在其操作中多次運行外部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(); 
     } 
    } 
} 
+0

它們應該平行還是一個接一個地運行? – RealSkeptic

+0

平行。當包含睡眠功能時,所有6個窗格會快速連續出現,因此所有6個窗格都立即顯示在屏幕上,並且該程序的以下功能並行運行。 – Dant

+0

一個接一個地運行它們有什麼問題? – notyou

回答

0

發現我自己的問題;因爲備份文件使用格式yyyy-MM-dd hh-mm-ss,並且在FileAlreadyExists異常中以相同的第二個結果保存的文件,這意味着只有第一個要保存的文件允許程序繼續運行。

有具有保存名稱不同的文件,暫停1分秒鐘的結果,所以不會發生錯誤。

有一些文件名重疊子暫停1秒鐘的結果,但有些不同的名字也一樣,因此一些文件出現。

解決方案:要麼改名字的格式(即包括毫秒),或包括if語句的備份功能,如果與同一時間的文件已經存在被忽略。

(也;謝謝@ErwinBolwidt,在鼓勵格式化我的問題正確,我意識到,在我的代碼的問題是不是我認爲它是)。