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 つのプログラムを実行したい場合、それぞれp1p2p3、およびを実行することp4です。しかし、6 が必要な場合はp1p2p3p4p5、およびp6. など (ご存じない場合は、p(#) はプロセス番号の名前です。

これらのプロセスが破棄されたら、totalRunnable に達するまで、同じ数のプロセスの次のセットを実行したいと考えています。

setsRunこれまでにループで実行されたプロセスの数です。setsRun決して値を渡しrunnableTogetherてはなりません。

編集: ああ、言い忘れていました: はい、Swing コンポーネントがまだ動作していないことはわかっています。「最後の仕上げ」を追加する前に、他のすべてが機能するのを待っています。

編集:補足としてJCheckBox boxRun、プロセスの実行中にフリーズする理由を理解しようとしています。呼び出し時にスレッドがスリープしているためかどうか疑問に思っていましたThread.sleep();

その場合、簡単な代替手段はありますか?

4

0 に答える 0