Pessoal estou com um problema no executável, o programa roda direitinho no eclipse mas quando crio um executável e rodo ele a tela simplesmente fecha ao clicar no botão
Precisamos de mais informações, como tá o código do programa? Como esse executável está sendo gerado?
Bem-vindo ao fórum!
esta sendo pelo o eclipse msm, exportando pelo runnable jar file. estar executando normalmente pela ide do eclipse. o programa pede login e senha ao clicar chama uma outra classe mas simplesmente ele fecha ao clicar
public class Entrar extends JFrameBase {
private static final long serialVersionUID = 8716638959202602472L;
public Entrar(Salao salao) {
setCentral(salao);
setTitle("Entrar");
logo();
botao();
caixasDeTextos();
separador();
setVisible(true);
}
private JButton entrar, visivel, esqueceu, sair;
private JTextField campoEmail;
private JPasswordField campoSenha;
private JLabel icone;
private JSeparator separador;
private void botao() {
entrar = new JButton("Entrar");
entrar.setFont(getFontDoButao());
entrar.setBackground(Color.decode("#CD7C8D"));
entrar.setBounds(155, 410, 100, 25);
entrar.setEnabled(false);
entrar.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if(getCentral().getProprietario().getEmail().equals(campoEmail.getText()) &&
getCentral().getProprietario().getSenha().equals(new String(campoSenha.getPassword()))) {
dispose();
new TelaPrincipalAdm(getCentral());
new TelaDeAviso("Bem-vindo(a) " + getCentral().getProprietario().getNome());
}
else {
boolean t = true;
for(int i = 0; i< getCentral().getTodosOsColaboradores().size(); i++) {
if(getCentral().getTodosOsColaboradores().get(i) != null) {
if(getCentral().getTodosOsColaboradores().get(i).getEmail().equals(campoEmail.getText()) &&
getCentral().getTodosOsColaboradores().get(i).getSenha().equals(new String(campoSenha.getPassword()))) {
new TelaPrincipalColaborador(getCentral(), campoEmail.getText());
new TelaDeAviso("Bem-vindo(a)");
t = false;
}
}
}
if(t) {
new TelaDeAviso("Dados incorretos");
}
}
}
});
getPainel().add(entrar);
visivel = new JButton(new ImageIcon(getClass().getResource("/img/iconEye.png")));
visivel.setBackground(Color.decode("#cccccc"));
visivel.setBorder(null);
visivel.setBounds(282, 323 , 20, 20);
visivel.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
ValidarEntrada.configurarVisibilidadeDeSenha(campoSenha);
}
});
getPainel().add(visivel);
esqueceu = new JButton("Esqueceu a senha?");
esqueceu.setBorder(null);
esqueceu.setBackground(Color.decode("#cccccc"));
esqueceu.setForeground(Color.decode("#CD7C8D"));
esqueceu.setBounds(105, 350, 100, 25);
esqueceu.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
dispose();
new BuscarEmail(getCentral());
}
});
getPainel().add(esqueceu);
sair = new JButton(new ImageIcon(getClass().getResource("/img/iconExit.png")));
sair.setBounds(400, 450, 30, 30);
sair.setBorder(null);
sair.setOpaque(false);
sair.setContentAreaFilled(false);
sair.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
dispose();
new Inicio(getCentral());
}
});
getPainel().add(sair);
}
private void caixasDeTextos() {
campoEmail = new JTextField("Digite seu e-mail");
campoEmail.setBounds(105, 225, 200, 25);
campoEmail.setBorder(null);
campoEmail.setBackground(Color.decode("#cccccc"));
campoEmail.addKeyListener(new KeyListener() {
public void keyTyped(KeyEvent e) {
campoSenha.setEnabled(ValidarEntrada.validarEmail(campoEmail.getText()));
}
public void keyPressed(KeyEvent e) {
}
public void keyReleased(KeyEvent e) {
}
});
getPainel().add(campoEmail);
campoSenha = new JPasswordField("Digite sua senha");
campoSenha.setBounds(105, 320, 200, 25);
campoSenha.setBorder(null);
campoSenha.setBackground(Color.decode("#cccccc"));
campoSenha.setEnabled(false);
campoSenha.setEchoChar('*');
campoSenha.addKeyListener(new KeyListener() {
public void keyTyped(KeyEvent e) {
entrar.setEnabled(ValidarEntrada.validarSenha( new String(campoSenha.getPassword())));
}
public void keyPressed(KeyEvent e) {
}
public void keyReleased(KeyEvent e) {
}
});
getPainel().add(campoSenha);
}
private void logo() {
icone = new JLabel(new ImageIcon(getClass().getResource("/img/IconLoginName.png")));
icone.setBounds(120, 90, 172, 96);
getPainel().add(icone);
}
public void separador() {
separador = new JSeparator();
separador.setBounds(105, 345, 200, 3);
separador.setBackground(Color.decode("#CD7C8D"));
separador.setForeground(Color.decode("#CD7C8D"));
getPainel().add(separador);
separador = new JSeparator();
separador.setBounds(105, 250, 200, 3);
separador.setBackground(Color.decode("#CD7C8D"));
separador.setForeground(Color.decode("#CD7C8D"));
getPainel().add(separador);
}
public JButton getEsqueceu() {
return esqueceu;
}
public void setEsqueceu(JButton esqueceu) {
this.esqueceu = esqueceu;
}
public JButton getEntrar() {
return entrar;
}
public void setEntrar(JButton entrar) {
this.entrar = entrar;
}
public JTextField getCampoEmail() {
return campoEmail;
}
public void setCampoEmail(JTextField campoEmail) {
this.campoEmail = campoEmail;
}
public JPasswordField getCampoSenha() {
return campoSenha;
}
public void setCampoSenha(JPasswordField campoSenha) {
this.campoSenha = campoSenha;
}
public JLabel getIcone() {
return icone;
}
public void setIcone(JLabel icone) {
this.icone = icone;
}
public JButton getVisivel() {
return visivel;
}
public void setVisivel(JButton visivel) {
this.visivel = visivel;
}
public JButton getSair() {
return sair;
}
public void setSair(JButton sair) {
this.sair = sair;
}
public JSeparator getSeparador() {
return separador;
}
public void setSeparador(JSeparator separador) {
this.separador = separador;
}
}
A partir do momento em que o programa estiver sendo executado a partir de um JAR, não é possível referenciar imagens no classpath dessa forma que vc fez. Em vez disso, vc deve recuperar usando o método getResourceAsStream.
Referências:
como poderia usar pra resolver meu problema?
Antes, só para confirmar, execute seu jar pela linha de comando para ver qual erro está estourando:
java -jar seuJar.jar
Depois, tente criar o ImageIcon assim:
new ImageIcon(getClass().getClassLoader().getResourceAsStream("/img/iconEye.png"))
quando executo pelo cmd:
java -jar Lista.jar
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at java.desktop/javax.swing.ImageIcon.<init>(ImageIcon.java:217)
at Telas.TelaPrincipalAdm.ImagemCentral(TelaPrincipalAdm.java:181)
at Telas.TelaPrincipalAdm.adicionandoImagem(TelaPrincipalAdm.java:177)
at Telas.TelaPrincipalBase.<init>(TelaPrincipalBase.java:27)
at Telas.TelaPrincipalAdm.<init>(TelaPrincipalAdm.java:18)
at Telas.Entrar$1.actionPerformed(Entrar.java:53)
at java.desktop/javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1967)
at java.desktop/javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2308)
at java.desktop/javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:405)
at java.desktop/javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:262)
at java.desktop/javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:279)
at java.desktop/java.awt.Component.processMouseEvent(Component.java:6635)
at java.desktop/javax.swing.JComponent.processMouseEvent(JComponent.java:3342)
at java.desktop/java.awt.Component.processEvent(Component.java:6400)
at java.desktop/java.awt.Container.processEvent(Container.java:2263)
at java.desktop/java.awt.Component.dispatchEventImpl(Component.java:5011)
at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2321)
at java.desktop/java.awt.Component.dispatchEvent(Component.java:4843)
at java.desktop/java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4918)
at java.desktop/java.awt.LightweightDispatcher.processMouseEvent(Container.java:4547)
at java.desktop/java.awt.LightweightDispatcher.dispatchEvent(Container.java:4488)
at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2307)
at java.desktop/java.awt.Window.dispatchEventImpl(Window.java:2772)
at java.desktop/java.awt.Component.dispatchEvent(Component.java:4843)
at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:772)
at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:721)
at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:715)
at java.base/java.security.AccessController.doPrivileged(Native Method)
at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:95)
at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:745)
at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:743)
at java.base/java.security.AccessController.doPrivileged(Native Method)
at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:742)
at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
Blz. Era o que estava pensando msm.
Agora tente criar o ImageIcon assim:
new ImageIcon(getClass().getClassLoader().getResourceAsStream("/img/iconEye.png"))
tentei mas o eclipse esta pedindo para retirar os argumentos do ImageIcon
Na verdade, para recuperar a imagem de um inputStream, tem que ser assim:
private ImageIcon criar(String caminhoImagem) throws IOException {
InputStream is = new BufferedInputStream(Main.class.getClassLoader().getResourceAsStream(caminhoImagem));
Image image = ImageIO.read(is);
return new ImageIcon(image);
}
Tente usar esse método no seu código para ver se vai.
fiz umas modificações e deu certo, vlw