Duvida com JButton

eae galera do fórum

Estou apredendo a java a pouco tempo!

Pessoal adicionei uma imagem a cada botão, e coloquei o caminho onde a imagem está, mas quando eu envio o programa para outro pc, tenho q enviar junto com o programa as imagens pois se não elas não aparecem. Minha duvida é se tem como fazer com que não seja necessario o envio das imagens juntos com o programa, pois se eu mandar e a pessoa mudar as imagens de Local “Destino”, elas não vão aparecer no programa.

um trecho do fonte

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Propriedades_Botões extends JPanel implements ActionListener {	

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	// variaveis de instancia:

	private JButton BD;
	private JButton IMC;
	private JButton Calculadora;
	private JButton Aluno;
	private JButton Ano; 
	private JButton C;
	private JButton F;


	public  Propriedades_Botões(){


		JLabel label = new JLabel();
		label=new JLabel("Conversor de número binário para decimal");
		add(label);

		ImageIcon img = new ImageIcon("D:/Documents and Settings/Administrador/Desktop/xD/binario.jpg");
		BD = new JButton(img);
		add(BD);
		BD.addActionListener(this);
		BD.setPreferredSize(new Dimension(164,35));


		JLabel label02 = new JLabel();
		label02 = new JLabel("Calcular IMC");
		add(label02);
		
		ImageIcon imgIMC = new ImageIcon("D:/Documents and Settings/Administrador/Desktop/xD/imc.png");
		IMC = new JButton(imgIMC);
		add(IMC);
		IMC.addActionListener(this);
		IMC.setPreferredSize(new Dimension(90,131));

		JLabel label03 = new JLabel();
		label03 = new JLabel("Calculando 2 termos");
		add(label03);

		ImageIcon imgcal = new ImageIcon("D:/Documents and Settings/Administrador/Desktop/xD/cal.png");
		Calculadora = new JButton(imgcal);
		add(Calculadora); 
		Calculadora.addActionListener(this);
		Calculadora.setPreferredSize(new Dimension(131,85));

		JLabel label04 = new JLabel();
		label04 = new JLabel("Registro Acadêmico");
		add(label04);

		ImageIcon imgUnip = new ImageIcon("D:/Documents and Settings/Administrador/Desktop/xD/unip.png");
		Aluno = new JButton(imgUnip);
		add(Aluno);
		Aluno.addActionListener(this);//registrando o painel como ouvinte
		Aluno.setPreferredSize(new Dimension(173,65));

		JLabel label05 = new JLabel();
		label05 = new JLabel("Ano Bissexto?");
		add(label05);

As imagens de qualquer forma tem que ir… você pode é criar um arquivo .jar que empacota tudo (é como se fosse um arquivo .zip), aí você não precisará se preocupar com o local dos arquivos. Se você criar o jar você vai ter que ler as imagens de forma diferente: ao invés de passar a string com o caminho da imagem no disco, vai ter que passar uma URL… para tal:

ImageIcon img = new ImageIcon(Class.class.getResource("<caminho da imagem dentro do jar a partir da raiz-src>"));  

É, o jeito é você criar por exemplo um diretório img e enviá-lo junto quando for distribuir sua aplicação e forçar o cliente a mantê-lo sempre no diretório que você especificou, como por ex no windows: C://NomeDaAplicacao/imgs/ , ou C://ArquivosDeProgramas/NomeDaAplicacao/imgs/

Ou então opta pela solução do JAR como o colega acima escreveu.

luizlcfc agradeço pela sua atenção, mas ainda não consegui,

fiz assim:

ImageIcon img = new ImageIcon(Class.class.getResource("D:/Documents and Settings/Administrador/workspace/LPOO/src/imc.png"));

agora ao executar o programa aparece:

Exception in thread “main” java.lang.NullPointerException
at javax.swing.ImageIcon.(Unknown Source)
at Interface.Propriedades_Botões.(Propriedades_Botões.java:42)
at Interface.Propriedades_Janela.(Propriedades_Janela.java:23)
at Interface.executador.main(executador.java:9)

fernandoeick blz?

foi isso mesmo que pensei de inicio, mas como é chato caso o usuario não faça isso. Por isso estou procurando outra solução!

Agradeço a atenção de todos!

Brun?, veja bem o que o colega escreveu:

[quote=luizlcfc]… Se você criar o jar você vai ter que ler as imagens de forma diferente: ao invés de passar a string com o caminho da imagem no disco, vai ter que passar uma URL… para tal:

ImageIcon img = new ImageIcon(Class.class.getResource("<caminho da imagem dentro do jar a partir da raiz-src>")); [/quote]
Você passou o caminho da imagem, não é o que o colega falou.

ImageIcon img = new ImageIcon(Class.class.getResource("D:/Documents and Settings/Administrador/workspace/LPOO/src/imc.png"));

é que ainda não entedi como fazer isso.

pasta raiz src? é a que fica no workspace dentro do meu projeto?

basta eu colocar as imagens dentro dessa pasta e apenar colocar a url da pasta?

se tiver como, me explica melhor.
vlw