Je cours un outil qui exécute un programme Java externe plusieurs fois dans son fonctionnement. L'outil externe commence par l'ouverture d'un JOptionPane dans un JFrame.Le programme rejette les étapes lors de l'exécution rapide (Java)
Voici un script de test que j'ai écrit pour essayer de résoudre mon problème.
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"));
}
}
}
Lorsque cela fonctionne, seulement JOptionPane (i = 5) de la course finale apparaît, mais il semble que d'autres « essaient » d'apparaître comme des vitres semblent ouvrir et fermer immédiatement.
Lorsque je décommente le Thread.sleep cependant, tous les volets s'ouvrent séparément. Si je règle le sommeil à 300 (0,3 secondes), environ la moitié des volets apparaissent, généralement le premier et le dernier.
Je voudrais trouver un moyen d'exécuter toutes les instances du programme externe complètement sans avoir besoin d'utiliser Thread.sleep() du tout, si possible.
Modifier: Conformément à mes exigences, j'ai également minimisé mon programme externe.
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();
}
}
}
Sont-ils censés fonctionner en parallèle ou l'un après l'autre? – RealSkeptic
En parallèle. Lorsque la fonction de veille est incluse, les 6 volets apparaissent l'un après l'autre en succession rapide, de sorte que tous les 6 sont sur l'écran à la fois, et les fonctions suivantes de ce programme fonctionnent en parallèle. – Dant
Qu'y a-t-il de mal à les faire fonctionner l'un après l'autre? – notyou