Path: csiph.com!usenet.pasdenom.info!aioe.org!eternal-september.org!feeder.eternal-september.org!mx02.eternal-september.org!.POSTED!not-for-mail From: Knute Johnson Newsgroups: comp.lang.java.programmer Subject: Re: merging two independant Java programs into one Java program running two threads? Date: Mon, 27 Oct 2014 08:09:57 -0700 Organization: A noiseless patient Spider Lines: 125 Message-ID: References: Mime-Version: 1.0 Content-Type: text/plain; charset=windows-1252; format=flowed Content-Transfer-Encoding: 7bit Injection-Date: Mon, 27 Oct 2014 15:09:38 +0000 (UTC) Injection-Info: mx02.eternal-september.org; posting-host="aba33539224e5c782fe0c4053f7756fd"; logging-data="25561"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX19AL0z6Aol6Vtm6M17a0EmI" User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:31.0) Gecko/20100101 Thunderbird/31.1.2 In-Reply-To: Cancel-Lock: sha1:ENky+FuQoz8nh5WcF1cwOKK86Nc= Xref: csiph.com comp.lang.java.programmer:30209 On 10/27/2014 06:33, John wrote: > Hi: > > I have two independent Java programs. Program A is a GUI program. > Program B continuously take screen shots every 5 seconds and save > them into PNG picture files. > > Right now, I start running Java Program B first, then start Program > A, doing GUI interaction etc. > > I hope to merge the two into one Java program which runs the original > two programs by two interdependent processes or threads(not sure > which one is correct. Help please). And I would like to have this > feature: when GUI interaction by me proceeds to certain stage, e.g. > when I click Button 'XYZ' on the GUI, the process/thread taking > screen shots halts. After a while, when I click another button, the > halted process/thread proceeds again. At the end, when I quit the GUI > program, the process/thread taking the screen shots ends as well. > > I think this makes me learn multi-thread programming or inter-process > communication. If you could shed some light on this project, I would > greatly appreciate it. > > Thank you very much. > Eric gave you a good discussion of the issues. This is just a simple example of starting and stopping a Thread to do a second task in your GUI program. import java.awt.*; import java.awt.event.*; import javax.swing.*; public class test2 extends JFrame implements ActionListener, Runnable { private final JMenuItem startstop; private final JTextArea textArea; private volatile Thread thread; private boolean runFlag; public test2() { addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent we) { stop(); dispose(); } }); JMenuBar mb = new JMenuBar(); setJMenuBar(mb); JMenu file = mb.add(new JMenu("file")); startstop = file.add("start"); startstop.addActionListener(this); textArea = new JTextArea(""); JScrollPane scrollPane = new JScrollPane(textArea); add(scrollPane,BorderLayout.CENTER); setSize(400,300); setLocationRelativeTo(null); setVisible(true); } public void actionPerformed(ActionEvent ae) { switch (ae.getActionCommand()) { case "start": textArea.append("start\n"); startstop.setText("stop"); start(); break; case "stop": textArea.append("stop\n"); startstop.setText("start"); stop(); break; } } public void start() { runFlag = true; thread = new Thread(this); thread.start(); } public void run() { while (runFlag) { // do your thing EventQueue.invokeLater(new Runnable() { public void run() { textArea.append("running\n"); } }); try { Thread.sleep(1000); } catch (InterruptedException ie) { EventQueue.invokeLater(new Runnable() { public void run() { textArea.append("sleep interrupted\n"); } }); } } } public void stop() { runFlag = false; thread.interrupt(); } public static void main(String... args) { EventQueue.invokeLater(new Runnable() { public void run() { new test2(); } }); } } -- Knute Johnson