取得したユーザー入力から適切な量のプロセスを実行するために、さまざまな状況を処理するための助けが必要です。
動的変数を使用する必要があるのか 、それとも何を使用する必要があるのか 、これについてどうすればよいかわかりません。
まず、私のコードです。完全なコードを提供します。これは短いため、これに必要なすべてのコードです。また、すべての情報がすぐそこにあります。
いずれかの方法:
package tf2_account_chief;
import java.awt.Container;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class TF2_Account_Chief extends JPanel implements ActionListener {
private static JFrame f = new JFrame("TF2 Account C.H.I.E.F.");
private JLabel run = new JLabel("Check box to run!");
private JCheckBox boxRun = new JCheckBox();
private static Image BGimg;
private static int allSets, setsRun, runnableTogether, totalRunnable;
private static final String dir = System.getProperty("user.dir");
public void launchFrame() {
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.pack(); //Adjusts panel to components for display
f.setVisible(true);
f.add(run);
f.add(boxRun);
f.setSize(500, 500);
run.setSize(500, 50);
boxRun.setSize(20, 15);
f.setLocation(0, 0);
run.setLocation(0, 50);
boxRun.setLocation(95, 100);
boxRun.addActionListener(this);
}
public void actionPerformed(final ActionEvent e) {
if (boxRun.isSelected()) {
System.out.println("running!");
try {
firstEvent1();
}
catch(Exception ex) {
}
}
else {
System.out.println("not running!");
}
}
private void firstEvent1() throws IOException {
totalRunnable = runnableTogether*17;
try {
if (allSets <= totalRunnable) {
if (setsRun <= runnableTogether) {
Runtime rt = Runtime.getRuntime();
Process p1 = rt.exec(dir + "/run/Idle1.bat");
setsRun++;
do {
}while(setsRun == 4);
Thread.sleep(5000);
p1.destroy();
/*p2.destroy();
p3.destroy();
p4.destroy();
p5.destroy();
p6.destroy();
p7.destroy();
p8.destroy();*/
}
allSets = allSets + runnableTogether;
}
} catch (Exception ex) {
}
}
public static void main(String[] args) throws IOException {
TF2_Account_Chief gui = new TF2_Account_Chief();
gui.launchFrame();
Container contentPane = f.getContentPane();
contentPane.add(new TF2_Account_Chief());
BGimg = ImageIO.read(new File(dir + "/tf2.jpg"));
}
public void paintComponent(Graphics g) {
g.drawImage(BGimg, 0, 0, null);
}
}
今、私がやりたいことは、ユーザーが一度に 4 つのプログラムを実行したい場合、それぞれp1
、p2
、p3
、およびを実行することp4
です。しかし、6 が必要な場合はp1
、p2
、p3
、p4
、p5
、およびp6
. など (ご存じない場合は、p(#) はプロセス番号の名前です。
これらのプロセスが破棄されたら、totalRunnable に達するまで、同じ数のプロセスの次のセットを実行したいと考えています。
setsRun
これまでにループで実行されたプロセスの数です。setsRun
決して値を渡しrunnableTogether
てはなりません。
編集: ああ、言い忘れていました: はい、Swing コンポーネントがまだ動作していないことはわかっています。「最後の仕上げ」を追加する前に、他のすべてが機能するのを待っています。
編集:補足としてJCheckBox boxRun
、プロセスの実行中にフリーズする理由を理解しようとしています。呼び出し時にスレッドがスリープしているためかどうか疑問に思っていましたThread.sleep();
その場合、簡単な代替手段はありますか?