0

我需要一些帮助来处理不同的情况,从用户输入中执行正确数量的进程。

我不确定我应该怎么做,是否应该使用动态变量或什么。

首先,我的代码,我将给出完整的代码,因为它很短,而且它都是必需的。此外,所有信息都在那里。

无论如何:

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 个程序,那么它将分别执行p1p2p3p4。但是,如果他们想要 6,那么p1, p2, p3, p4, p5, 和p6. 等等(如果您不知道,p(#) 是进程号的名称。

一旦这些进程被销毁,我希望执行下一组相同数量的进程,直到达到 totalRunnable。

setsRun是到目前为止在循环中执行的进程数。setsRun永远不应该传递runnableTogether价值。

编辑:哦,我忘了提:是的,我知道 Swing 组件还没有工作。在添加“收尾工作”之前,我正在等待其他所有工作。

编辑:顺便说一句,我也一直在试图弄清楚为什么我JCheckBox boxRun在进程运行时冻结了。我一直想知道是不是因为我打电话时线程正在睡觉Thread.sleep();

如果是这种情况,是否有简单的替代方案?

4

0 回答 0