E' piuttosto banale (non serve nemmeno un booleano).
Un esempio completo.


codice:
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;

public class NoDoppi extends JFrame {

   private JFrame altraFinestra;

   public NoDoppi() {
      Container c = getContentPane();
      c.setLayout( null );

      JButton cmd = new JButton("Apri finestra");
      cmd.setBounds(20, 20, 120, 30);
      cmd.addActionListener( new ActionListener() {
         @Override
         public void actionPerformed(ActionEvent ae) {
            apriFinestra();
         }
      });

      c.add( cmd );
      setTitle("Niente doppioni");
      setSize(800, 600);
      setLocationRelativeTo( null );
      setDefaultCloseOperation( EXIT_ON_CLOSE );
   }

   private void apriFinestra() {
      if (altraFinestra != null) {
         altraFinestra.setVisible( true );
         altraFinestra.toFront();
      } else {
         altraFinestra = new JFrame("Altra finestra");
         altraFinestra.add(new JLabel("Label"), BorderLayout.NORTH);
         altraFinestra.setSize(400, 400);
         altraFinestra.setLocationRelativeTo(this);
         altraFinestra.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
         altraFinestra.setVisible( true );
      }
   }

   public static void main(String[] args) {
      SwingUtilities.invokeLater( new Runnable() {
         @Override
         public void run() {
            NoDoppi nd = new NoDoppi();
            nd.setVisible( true );
         }
      });
   }
}

Ciao.