Problemas com executável do Java projeto swing

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.

1 curtida

fiz umas modificações e deu certo, vlw

1 curtida