我需要一些帮助来处理不同的情况,从用户输入中执行正确数量的进程。
我不确定我应该怎么做,是否应该使用动态变量或什么。
首先,我的代码,我将给出完整的代码,因为它很短,而且它都是必需的。此外,所有信息都在那里。
无论如何:
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();
如果是这种情况,是否有简单的替代方案?