Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.java.programmer > #30209

Re: merging two independant Java programs into one Java program running two threads?

From Knute Johnson <eternal@knutejohnson.com>
Newsgroups comp.lang.java.programmer
Subject Re: merging two independant Java programs into one Java program running two threads?
Date 2014-10-27 08:09 -0700
Organization A noiseless patient Spider
Message-ID <m2ln7h$oup$1@dont-email.me> (permalink)
References <c306a7d8-970d-4efe-9776-cb27b69568f9@googlegroups.com>

Show all headers | View raw


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

Back to comp.lang.java.programmer | Previous | Next — Previous in thread | Find similar | Unroll thread


Thread

merging two independant Java programs into one Java program running two threads? John <xsli2@yahoo.com> - 2014-10-27 06:33 -0700
  Re: merging two independant Java programs into one Java program running two threads? Eric Sosman <esosman@comcast-dot-net.invalid> - 2014-10-27 10:57 -0400
  Re: merging two independant Java programs into one Java program running two threads? Knute Johnson <eternal@knutejohnson.com> - 2014-10-27 08:09 -0700

csiph-web