Problemas fechar um janela do JInternalFrame quando clicar para abrir outro JInternalFrame

Olá, pessoal!

Tentando várias vezes para testar fechar janela várias vezes em cada item do menu para chamar uma janela mas ocorreu erro. veja o mensagem de erro em baixo:

[quote]
Exception in thread “AWT-EventQueue-0” java.lang.IllegalArgumentException: illegal component position
at java.awt.Container.addImpl(Unknown Source)
at javax.swing.JLayeredPane.addImpl(Unknown Source)
at javax.swing.JDesktopPane.addImpl(Unknown Source)
at java.awt.Container.add(Unknown Source)
at Teste.JanelaInterno.actionPerformed(JanelaInterno.java:128)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.AbstractButton.doClick(Unknown Source)
at javax.swing.plaf.basic.BasicMenuItemUI.doClick(Unknown Source)
at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$000(Unknown Source)
at java.awt.EventQueue$1.run(Unknown Source)
at java.awt.EventQueue$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$2.run(Unknown Source)
at java.awt.EventQueue$2.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)[/quote]

Código da java é

public class JanelaInterno extends JFrame implements ActionListener {
	JMenu mAluno, mProf;
	JDesktopPane dtpPane;
	private Janela1 janela1;
	private Janela2 janela2;

	public JanelaInterno() {
		super("Janela Interno");

		dtpPane = new JDesktopPane();

		this.setJMenuBar(barraMenu());
		this.setContentPane(dtpPane);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setSize(400, 400);
		this.setVisible(true);

	}

	public JMenuBar barraMenu() {

		JMenuBar barra = new JMenuBar();

		String[] itemAluno1 = { "Disciplina", "Conceitos" };

		mAluno = menu("Aluno", itemAluno1);

		barra.add(mAluno);

		String[] itemProfConceito = { "Consulta Conceitos",
				"Atribuir Conceitos" };
		String[] itemProfFaltas = { "Verifica faltas", "Atribuir Faltas" };

		JMenu[] mProfSubMenu = { menu("Conceitos", itemProfConceito),
				menu("Faltas", itemProfFaltas) };

		mProf = menu("Professor", mProfSubMenu);

		barra.add(mProf);

		return barra;
	}

	@SuppressWarnings("unused")
	private JMenu menu(String nome) {
		JMenu j = new JMenu(nome);
		j.setActionCommand(nome.toLowerCase());
		j.addActionListener(this);

		return j;
	}

	private JMenu menu(String nome, String[] nomeItem) {
		JMenu j = new JMenu(nome);

		for (int i = 0; i < nomeItem.length; i++) {
			j.add(item(nomeItem[i]));
		}
		return j;
	}

	private JMenu menu(String nome, JMenu[] submenu) {
		JMenu j = new JMenu(nome);

		for (int i = 0; i < submenu.length; i++) {
			j.add(submenu[i]);
		}
		return j;
	}

	@SuppressWarnings("unused")
	private JMenu menu(String nome, JMenuItem[] nomeItem) {
		JMenu j = new JMenu(nome);

		for (int i = 0; i < nomeItem.length; i++) {
			j.add(item(nomeItem[i]));
		}
		return j;
	}

	private JMenuItem item(String nome) {

		JMenuItem j = new JMenuItem(nome);
		j.setActionCommand(nome.replace(" ", "_").toLowerCase());
		j.addActionListener(this);

		return j;
	}

	private JMenuItem item(JMenuItem j) {
		System.out.println("JmenuItem: "
				+ j.getText().toString().toLowerCase().replace(" ", "_"));
		j.setActionCommand(j.getText().toString().toLowerCase()
				.replace(" ", "_"));
		j.addActionListener(this);

		return j;
	}

	@Override
	public void actionPerformed(ActionEvent e) {

		if ("disciplina".equals(e.getActionCommand())) {

			if (janela2 != null) {
				janela2.dispose();
			}

			if (janela1 == null) {
				janela1 = new Janela1();
				janela1.setVisible(true);
				dtpPane.add(janela1);
			} 

		}
		if ("conceitos".equals(e.getActionCommand())) {

			// verifica se as janelas está aberta e fecha na janela1.
			if (janela1 != null) {
					janela1.dispose();
			}
			// se janela não está aberta apenas abre;
			if (janela2 == null) {
				janela2 = new Janela2();
				janela2.setVisible(true);
				dtpPane.add(janela2);
			} 
		}

		if ("consulta_conceitos".equals(e.getActionCommand())) {
			System.out.println("Consulta Conceitos");
		}
		if ("atribuir_conceitos".equals(e.getActionCommand())) {
			System.out.println("Atribuir Conceitos");
		}
		if ("verifica_faltas".equals(e.getActionCommand())) {
			System.out.println("Verifica faltas");
		}
		if ("atribuir_faltas".equals(e.getActionCommand())) {
			System.out.println("Atribuir Faltas");
		}

	}

}

Espero até me ajuda para uma dica a resolver esse problemas

Não entendi muito bem sua dúvida e o código não consegui testar porque o código possui dependências.
Você quer fechar JInternalFrame e não consegue?

[quote=Ivan Alves]Não entendi muito bem sua dúvida e o código não consegui testar porque o código possui dependências.
Você quer fechar JInternalFrame e não consegue?[/quote]

Quer dizer é fechar um JInternalFrame só quando clicar no menu para chamar outro JInternalFrame para abrir é forma automatica. Em cada clicar menu, fechar alguns JInternalFrame que está aberta e chame um JInternalFrame quando estiver clicando um menu.

Veja alguns código em baixo


if ("disciplina".equals(e.getActionCommand())) {
                       

                       // verifica se Janela 2 está aberta, fecha a janela 2
			if (janela2 != null) {
				janela2.dispose();
			}
                        

                       // verifica se janela 1 não está aberta, chama janela 1 para abrir.
			if (janela1 == null) {
				janela1 = new Janela1();
				janela1.setVisible(true);
				dtpPane.add(janela1);
			} 

		}
		if ("conceitos".equals(e.getActionCommand())) {

			// verifica se a janela 1 está aberta e fecha na janela 1.
			if (janela1 != null) {
					janela1.dispose();
			}
			// se janela 2 não está aberta e chame para abrir janela 2;
			if (janela2 == null) {
				janela2 = new Janela2();
				janela2.setVisible(true);
				dtpPane.add(janela2);
			} 
		}

[quote=jsnpereira][quote=Ivan Alves]Não entendi muito bem sua dúvida e o código não consegui testar porque o código possui dependências.
Você quer fechar JInternalFrame e não consegue?[/quote]

Quer dizer é fechar um JInternalFrame só quando clicar no menu para chamar outro JInternalFrame para abrir é forma automatica. Em cada clicar menu, fechar alguns JInternalFrame que está aberta e chame um JInternalFrame quando estiver clicando um menu.

Veja alguns código em baixo


if ("disciplina".equals(e.getActionCommand())) {
                       

                       // verifica se Janela 2 está aberta, fecha a janela 2
			if (janela2 != null) {
				janela2.dispose();
			}
                        

                       // verifica se janela 1 não está aberta, chama janela 1 para abrir.
			if (janela1 == null) {
				janela1 = new Janela1();
				janela1.setVisible(true);
				dtpPane.add(janela1);
			} 

		}
		if ("conceitos".equals(e.getActionCommand())) {

			// verifica se a janela 1 está aberta e fecha na janela 1.
			if (janela1 != null) {
					janela1.dispose();
			}
			// se janela 2 não está aberta e chame para abrir janela 2;
			if (janela2 == null) {
				janela2 = new Janela2();
				janela2.setVisible(true);
				dtpPane.add(janela2);
			} 
		}

[/quote]

Tente o

em vez do