title: Launching External Programs with Java?
body: <p><strong>Problem:</strong> Automatically close a program after a certain amount of minutes.</p>
  
  <p><strong>Solution:</strong> Here is what I came up with to solve my problem (works with Rhythmbox on Ubuntu):</p>
  
  <pre><code>package rhythmBox;
  
  import java.awt.Container;
  import java.awt.FlowLayout;
  import java.awt.event.ActionEvent;
  import java.awt.event.ActionListener;
  import java.io.IOException;
  import java.util.concurrent.TimeUnit;
  import javax.swing.JButton;
  import javax.swing.JFrame;
  import javax.swing.JLabel;
  import javax.swing.JPanel;
  import javax.swing.JTextField;
  
  public class closeRhythmBox extends JFrame implements ActionListener {
  
  private static final long serialVersionUID = 1L;
  private static final int WIDTH = 400;
  private static final int HEIGHT = 300;
  private JTextField minutesBox;
  
  public static void main(String[] args) {
      new closeRhythmBox().setVisible(true);
  }
  
  public static void execKill(long minutes) throws InterruptedException {
      Thread.sleep(minutes*60*1000);
      try{
      Runtime.getRuntime().exec("pkill rhythmbox");
      System.exit(0);
          }
      catch (IOException ioe) {
            ioe.printStackTrace();
          }
  }
  public closeRhythmBox(){
      setTitle("Rythmbox Timer");
      setSize(WIDTH, HEIGHT);
      setVisible(true);
      setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  
      Container pane = getContentPane();
      pane.setLayout(new FlowLayout());
  
      JPanel box = new JPanel();
      box.setLayout(new FlowLayout());
      JButton startButton = new JButton("Start");
      startButton.addActionListener(this);
      box.add(startButton);
      box.add(new JLabel("Minutes Until Close"));
      box.add(minutesBox = new JTextField(20));
  
      pane.add(box);
      pack();
  
  }
  
  public void actionPerformed(ActionEvent e) {
      String textNum = minutesBox.getText();
      long minuteNum = Long.parseLong(textNum);
      if (e.getActionCommand().equals("Start")){
          try {
              execKill(minuteNum);
          } catch (InterruptedException e1) {
              e1.printStackTrace();
          }
      }
  }   
  </code></pre>
  
  <p>}</p>