Reiniciar um Programa

11 respostas
vpmaciel1981
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;

@SuppressWarnings("serial")
public class Aplicacao extends JFrame {

	private JButton button = new JButton("Reinicia Programa");
	private Container container;

	public Aplicacao() {
		container = getContentPane();
		setLayout(null);
		setSize(300, 100);

		button.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				// comando para reiniciar aplicação
			}
		});

		button.setBounds(10, 10, 200, 30);
		container.add(button);
	}

	public static void main(String[] args) {

		Aplicacao frame = new Aplicacao();
		Aplicacao app = new Aplicacao();
		frame.setVisible(true);
	}
}

Queria saber se tem como fechar o programa e depois reiniciar depois de clicar no botão?

11 Respostas

luis_serra

eu sei que da pra encerrar direto, Ex:

jButton1.setExit(WHIDH);

se não tenho ctz se é assim mesmo. abraços

vpmaciel1981

luis_serra:
eu sei que da pra encerrar direto, Ex:

jButton1.setExit(WHIDH);

se não tenho ctz se é assim mesmo. abraços

tentei tambem com
System.exit(JFrame.WIDTH);
mas não consegui ainda.

gomesrod

Se só precisa voltar tudo ao estado inicial é simples, pode implementar programaticamente a rotina para “resetar” toda a aplicação: reiniciar conexoes com banco de dados, descartar os frames e instanciar uma nova janela principal, etc.

Mas se precisa reiniciar MESMO, inclusive com recarregamento das classes, então não dá para fazer só pelo Java, precisa de algum esquema na plataforma onde está rodando. Por exemplo um arquivo BAT que dependendo do código de retorno executa o mesmo programa novamente.

luis_serra

Opa cara…você me corrigiu, era esse o código! Obrigado

System.exit(JFrame.WIDTH);

Mais quando eu usei isso não tinha o JFrame como parâmetro.
era assim

System.exit(WIDTH);
gomesrod
System.exit(JFrame.WIDTH);

Isso não faz sentido. O parâmetro do método System.exit() é o código de retorno, que não tem nada a ver com essa constante JFrame.WIDTH

Evidentemente funciona, assim como

System.exit(205432);

System.exit(123 + 456 + 789 + 10);

System.exit(BigDecimal.ROUND_HALF_UP);

Mas esse código tem que fazer sentido para a aplicação, usar qualquer coisa ao acaso (como fiz acima) é uma péssima idéia.

luis_serra

Lembrando que o código é usado apenas para Encerrar, não para reiniciar.
Tenta colocar igual eu falei pra ver se vai funcionar pq no NetBeans funciono.

System.exit(WIDTH);
vpmaciel1981

gomesrod:
System.exit(JFrame.WIDTH);
Isso não faz sentido. O parâmetro do método System.exit() é o código de retorno, que não tem nada a ver com essa constante JFrame.WIDTH

Evidentemente funciona, assim como

System.exit(205432);

System.exit(123 + 456 + 789 + 10);

System.exit(BigDecimal.ROUND_HALF_UP);

Mas esse código tem que fazer sentido para a aplicação, usar qualquer coisa ao acaso (como fiz acima) é uma péssima idéia.



vpmaciel1981
package depto.aop.configuracao;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.Locale;

import javax.swing.JOptionPane;

public class Configuracao {

	private static Locale locale;

	static {
		Configuracao.carregarConfiguracoes();
	}

	public static void carregarConfiguracoes() {
		FileInputStream fis = null;
		File file;
		ObjectInputStream ois = null;

		try {

			file = new File("depto.cfg");

			if (!file.exists()) {

				file.createNewFile();
			}

			fis = new FileInputStream("depto.cfg");
			ois = new ObjectInputStream(fis);
			Configuracao.locale = (Locale) ois.readObject();

			if (Configuracao.locale == null) {
				JOptionPane.showMessageDialog(null, "Erro!",
						"Erro ao abrir arquivo", JOptionPane.ERROR_MESSAGE);
			}
			ois.close();

		} catch (final Exception e) {
			e.printStackTrace();
			JOptionPane.showMessageDialog(null,
					"Arquivo depto.cfg não pode ser carregado!",
					"Erro ao abrir arquivo", JOptionPane.ERROR_MESSAGE);
		}
	}

	public static Locale getLocale() {
		return Configuracao.locale;
	}

	public static void salvarConfiguracoes() {

		File file;

		try {

			file = new File("depto.cfg");

			if (!file.exists()) {

				file.createNewFile();
			}

			final FileOutputStream fos = new FileOutputStream(file);
			final ObjectOutputStream oos = new ObjectOutputStream(fos);
			oos.writeObject(Configuracao.locale);
			oos.close();

		} catch (final Exception e) {
			e.printStackTrace();
			JOptionPane.showMessageDialog(null,
					"Arquivo depto.cfg não pode ser gravado!",
					"Erro ao gravar arquivo", JOptionPane.ERROR_MESSAGE);
		}
	}

	public static void setLocale(Locale locale) {
		Configuracao.locale = locale;
		if (locale == null) {
			locale = Locale.getDefault();
			System.out.println(1);
		}
	}

	private Configuracao() {

	}
}
vpmaciel1981

paulo_1981:
gomesrod:
System.exit(JFrame.WIDTH);
Isso não faz sentido. O parâmetro do método System.exit() é o código de retorno, que não tem nada a ver com essa constante JFrame.WIDTH

Evidentemente funciona, assim como

System.exit(205432);

System.exit(123 + 456 + 789 + 10);

System.exit(BigDecimal.ROUND_HALF_UP);

Mas esse código tem que fazer sentido para a aplicação, usar qualquer coisa ao acaso (como fiz acima) é uma péssima idéia.

labelBanco = new JLabel(AOP.getMessage("Banco"));

O problema é que fiz o programa para versões em inglês, português e espanhol.
e quando eu clico no botão confirmar ele grava o objeto locale selecionado e quando o programa é iniciado ele escolhe o idioma de acordo com
o arquivo properties correspondente

package depto.principal;

import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

import depto.aop.configuracao.Configuracao;
import depto.usuario.Usuario;
import depto.usuario.UsuarioUtil;

public class Principal {

	private static final String caminhoApp = System.getProperty("user.dir")
			+ System.getProperty("file.separator") + "DeptoPessoal.jar";

	public static String getCaminhoApp() {
		return Principal.caminhoApp;
	}

	public static void main(final String[] args) {

		try {

			javax.swing.SwingUtilities.invokeLater(new Runnable() {
				@Override
				public void run() {

					try {
						UIManager.setLookAndFeel(UIManager
								.getSystemLookAndFeelClassName());
					} catch (final ClassNotFoundException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					} catch (final InstantiationException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					} catch (final IllegalAccessException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					} catch (final UnsupportedLookAndFeelException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
					Configuracao.salvarConfiguracoes();
					UsuarioUtil.criarUsuario();
					final Usuario usuario = new Usuario();
					Configuracao.carregarConfiguracoes();
					usuario.setLocale(Configuracao.getLocale());
					final JanelaPrincipal application = new JanelaPrincipal(
							usuario);
					application.setLocationRelativeTo(null);
					application.setExtendedState(java.awt.Frame.MAXIMIZED_BOTH);
					application.setVisible(true);

				}
			});

		} catch (final Exception e) {
			e.printStackTrace();
		}
	}
}
gomesrod

Acho que misturou os tópicos hehe

vpmaciel1981

Não misturei os tópicos eu preciso que o programa seja reiniciado ou que o ResouceBundle seja atualizado.

Mas como me perguntaram porque eu queria que o programa fosse reiniciado coloquei o motivo,
não foi só por querer saber.

Criado 21 de agosto de 2011
Ultima resposta 6 de set. de 2011
Respostas 11
Participantes 3