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?
eu sei que da pra encerrar direto, Ex:
jButton1.setExit(WHIDH);
se não tenho ctz se é assim mesmo. abraços
[quote=luis_serra]eu sei que da pra encerrar direto, Ex:
jButton1.setExit(WHIDH);
se não tenho ctz se é assim mesmo. abraços[/quote]
tentei tambem com
System.exit(JFrame.WIDTH);
mas não consegui ainda.
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.
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);
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.
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);
[quote=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.
[/quote]
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() {
}
}
[quote=paulo_1981][quote=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.
[/quote][/quote]
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();
}
}
}
Acho que misturou os tópicos hehe
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.