Alterar ícone da barra de título, do arquivo .jar

21 respostas
Suellen_Susu

Pessoal, eu ja vi vários tópicos sobre o assunto aqui no fórum, além de testar diversos códigos que encontrei…

Porém, nenhum dos códigos funcionou, pois eu altero o ícone no NetBeans e executo o programa, ai ele aparece…

Mas se for executá-lo diretamente do .jar, o ícone não aparece!!!

Ja fiz trocentas coisas e não deu ceto…

Quem souber a solução, por favor me ajude…

Agradeço desde já…

21 Respostas

Vanilson

Suellen tenta usar o seguinte codigo:

ImageIcon icone = new ImageIcon("Imagem/vanilsondbl.png");
setIconImage(icone.getImage());

Obs: Não esqueça de fazer o import do ImageIcon da swing.

M

tuas imagens estão importadas dentro de um pacote no projeto?

Se sim tem algumas formas:

frame.setIconImage(Toolkit.getDefaultToolkit().getImage("pacote/imagem.extensao"));

ou

frame.setIconImage(getClass().getResource("pacote/suaImagem.extensao"));
M

referencias:
http://java.sun.com/docs/books/tutorial/uiswing/components/icon.html
http://www.roseindia.net/java/example/java/swing/SettingIconFrame.shtml

alexandref93

[quote=markin1]tuas imagens estão importadas dentro de um pacote no projeto?

Se sim tem algumas formas:

frame.setIconImage(Toolkit.getDefaultToolkit().getImage("pacote/imagem.extensao"));

ou

frame.setIconImage(getClass().getResource("pacote/suaImagem.extensao"));

bem, tentei aqui e não funcionou, o correto é implementar depois do initComponents();??? sim, jah importei a imagem pro pacote, mais nada funcionou!!!
qual é o possivel problema???

alexandref93

o erro está acusando no nome da extensão que é “.jpg” qual é o problema???

guisantogui

tem q criar um objeto do tipo “Icon” antes de setá-lo!

alexandref93

mais já tah criado, e mesmo assim continua o problema!!!

M
setFrameIcon(new javax.swing.ImageIcon(getClass().getResource("/pacote/imagem.extensao")));
alexandref93

bem devo acrescentar mais alguma coisa???, por que está pedindo pra criar um método no JFrame que estou implemetando, mais desse jeito, a classe nem executa, qual seria o problema???

M

Porque você não posta o que você tá fazendo? Fica mais fácil de ver onde está errando.

alexandref93
import java.awt.Color;

import javax.swing.JDesktopPane;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.UIManager;


public class PainelFrame extends javax.swing.JFrame {
	
	public PainelFrame(){
		try {
			UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
			} catch (Exception e) {
				e.printStackTrace();
			}	
		initComponents();
		setLocationRelativeTo(null);
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		setExtendedState(MAXIMIZED_BOTH);
		setTitle("Fox Home Vídeo");
		setFrameIcon(new javax.swing.ImageIcon(.getClass().getResource("/imagem/dialoglogo128x128.jpg"));
	}

	private void initComponents() {
	JMenuBar barra = new javax.swing.JMenuBar();
	JMenu cliente = new javax.swing.JMenu("Cliente");
	barra.add(cliente);
	
	setJMenuBar(barra);
	JDesktopPane lc = new javax.swing.JDesktopPane();
	add(lc);
		
	}
	
	public static void main(String [] args){
		java.awt.EventQueue.invokeLater(new Runnable(){
			public void run (){
				new PainelFrame().setVisible(true);
				
			}
		});
	}
	
	

}
E

Pegue seu jar. mude a extensão para .zip, abra-o com alguma coisa que saiba olhar dentro de arquivos ZIP (o próprio Windows Explorer consegue fazer isso) e então veja se existe dentro do diretório “imagem” o arquivo “dialoglogo128x128.jpg”. Ele tem de estar exatamente com esse nome, e com as maiúsculas e minúsculas certas. Por exemplo, se o nome está como “dialoglogo128x128.JPG” (ou seja, com maiúsculas na extensão), o Java não vai achar dentro do JAR.

OK?

alexandref93

entanglement:
Pegue seu jar. mude a extensão para .zip, abra-o com alguma coisa que saiba olhar dentro de arquivos ZIP (o próprio Windows Explorer consegue fazer isso) e então veja se existe dentro do diretório “imagem” o arquivo “dialoglogo128x128.jpg”. Ele tem de estar exatamente com esse nome, e com as maiúsculas e minúsculas certas. Por exemplo, se o nome está como “dialoglogo128x128.JPG” (ou seja, com maiúsculas na extensão), o Java não vai achar dentro do JAR.

OK?

mais o erro que está acusando aqui é no “setFrameIcon”, mais fiz isso que vc pediu, mais não mudou nada, o nome do arquivo é minúsculo mesmo!

E

Tio, você é um fanfarrão. Como é que esse programa está rodando? Que eu saiba, em Java não dá para começar uma expressão com um ponto. Veja como é que estão o seu “getClass()”. Por que é que há um ponto antes do getClass()?

setFrameIcon(new  javax.swing.ImageIcon(.getClass().getResource("/imagem/dialoglogo128x128.jpg"));

Você provavelmente deve estar rodando uma versão antiga. Limpe o seu projeto, rode de novo, tire todos os erros de compilação, e veja que o seu problema não é exatamente o nome do arquivo.

M

Além disso, uma sugestão: para usar o LookAndFeel do sistema faça:

try {
    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (Exception e) {
    e.printStackTrace();
}

Isso permite que o programa tenha a aparência desejada em vários sistemas operacionais.

Suellen_Susu

Respondendo ao Vanilson:

Este foi o primeiro código que testei e não da certo, acontece o que falei na pergunta…

Roda no netbeans, mas no .jar não aparece o ícone…

Respondendo ao markin1:

quando vc diz se minhas imagens estão importadas dentro de um pacote no projeto, vc quer dizer em criar uma pasta no projeto, apenas com as imagens que vou utilizar?

se é isso, ja tenho…

Respondendo a quarta mensagem de alexandref93:

seu erro esta na extenção do arquivo, pois o caminho da imagem não pode estar assim: i[/i]

e sim, desta forma: i[/i] , pois não existe contra-barra antes do ínicio do caminho da imagem.

alexandref93

entanglement:
Tio, você é um fanfarrão. Como é que esse programa está rodando? Que eu saiba, em Java não dá para começar uma expressão com um ponto. Veja como é que estão o seu “getClass()”. Por que é que há um ponto antes do getClass()?

setFrameIcon(new  javax.swing.ImageIcon(.getClass().getResource("/imagem/dialoglogo128x128.jpg"));

Você provavelmente deve estar rodando uma versão antiga. Limpe o seu projeto, rode de novo, tire todos os erros de compilação, e veja que o seu problema não é exatamente o nome do arquivo.

fanfarrão??? oO, tah tirei o ponto antes do getClass xD, o projeto não possui nenhum erro, o único erro está acusando é no “setFrameIcon” e no nome do arquivo!!!

alexandref93

marcobiscaro2112:
Além disso, uma sugestão: para usar o LookAndFeel do sistema faça:

try {
    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (Exception e) {
    e.printStackTrace();
}

Isso permite que o programa tenha a aparência desejada em vários sistemas operacionais.

vlw pela sugestão!!!

Suellen_Susu

Então pessoal, vcs tmb não descobriram meu erro?

é como tinha dito antes, roda o ícone no netbeans, no .jar não aparece…

me ajudem, preciso entregar meu tcc semana q vem, e o único erro é esse…

KWill

No AWT, no código da minha biblioteca SAW-Terminal, uso algo parecido com isso:

this.setIconImage(ImageIO.read(this.getClass().getResourceAsStream("/[pacote]/[arquivo].[extensao]")));

Devo lembrar que o arquivo de imagem deve estar junto com as classes carregadas no classpath, sendo que colocar a imagem no arquivo jar a ser executado deve bastar.

Inté.

alexandref93

KWill:
No AWT, no código da minha biblioteca SAW-Terminal, uso algo parecido com isso:

this.setIconImage(ImageIO.read(this.getClass().getResourceAsStream("/[pacote]/[arquivo].[extensao]")));

Devo lembrar que o arquivo de imagem deve estar junto com as classes carregadas no classpath, sendo que colocar a imagem no arquivo jar a ser executado deve bastar.

Inté.

o problema ainda continua:

import javax.imageio.ImageIO;
import javax.swing.JDesktopPane;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;

@SuppressWarnings("serial")
public class PainelFrame extends javax.swing.JFrame {
	
	public PainelFrame() {
		initComponents();
		setLocationRelativeTo(null);
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		setExtendedState(MAXIMIZED_BOTH);
		setTitle("Fox Home Vídeo");
		this.setIconImage(ImageIO.read(this.getClass().getResourceAsStream("/classpath/dialoglogo128x128.jpg")));
		
	}

	private void initComponents() {
	JMenuBar barra = new javax.swing.JMenuBar();
	JMenu manutencaoMenu = new javax.swing.JMenu("Manutenção");
	barra.add(manutencaoMenu);
	JMenuItem cadastroclienteMenu = new javax.swing.JMenuItem("Cadastro de cliente");
	manutencaoMenu.add(cadastroclienteMenu);
	
	
	setJMenuBar(barra);
	JDesktopPane lc = new javax.swing.JDesktopPane();
	add(lc);
		
	}
	
	@SuppressWarnings("unused")
	private void cadastroclienteMenuActionPerformed(java.awt.event.ActionEvent evt){
		new CadastroClienteFrame().setVisible(true);
	
	}
	
	public static void main(String [] args){
		java.awt.EventQueue.invokeLater(new Runnable(){
			public void run (){
				new PainelFrame().setVisible(true);
				
			}
		});
	}
}

caraca, é complicado trocar ícone hei, mais vou conseguir!!

Criado 23 de junho de 2010
Ultima resposta 24 de jun. de 2010
Respostas 21
Participantes 8