Pessoal criei um arquivo .jar de um jogo de Damas que eu fiz, ele abre normalmente clicando no arquivo, só que ele não carrega as imagens do programa. Alguem sabe me dizer qual e o problema? Valeu. Obs: fiz usando o eclipse.
Como vc está carregando as imagens no seu programa dentro do jar?Posta o código aqui(favor usar as tags Code!)
Minha classe Principal onde eu coloco o caminho das img, crio o Frame e implemento o Painel com o Tabuleiro:
package game;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
public class Principal extends JFrame implements ActionListener {
JLabel texto, nome, nomeori;
ImageIcon imgDama;
String nomeuser;
JMenuBar barraMenus; // barra de menus
JMenuItem itemdeMenu; // intem de um menu
public Principal(){
setExtendedState(JFrame.MAXIMIZED_BOTH);
//imgDama = new ImageIcon("../JogoDamas/imagens/titulo.jpg");
imgDama = new ImageIcon("../JogoDamas/bin/SRC/imagens/titulo.jpg");// Aqui eu carrego as img, so q nao aparece qdo clico no arquivo .jar
// só qdo eu compilo e abro ele pelo eclipse
// me falaram q tinha q mudar a maneira como se chama as img no projeto, so que nao sei como faz isso
nome = new JLabel("Nome jogador:");
nome.setBounds(600, 180, 100, 20);
nome.setVisible(false);
this.getContentPane().add(nome);
nomeori = new JLabel("");
nomeori.setBounds(700, 180, 100, 20);
nomeori.setVisible(false);
this.getContentPane().add(nomeori);
barraMenus = new JMenuBar();
this.setJMenuBar(barraMenus);
JMenu arquivo = new JMenu("Arquivo");
JMenu edit = new JMenu("Editar");
barraMenus.add(arquivo);
barraMenus.add(edit);
JMenuItem novo = new JMenuItem("Novo Jogo");
JMenuItem abrir = new JMenuItem("Recordes");
JMenuItem sair = new JMenuItem("Sair");
novo.addActionListener(this);
sair.addActionListener(this);
JMenuItem recortar = new JMenuItem("Recortar");
JMenuItem copiar = new JMenuItem("Copiar");
JMenuItem colar = new JMenuItem("Colar");
arquivo.add(novo);
// linha horizontal
arquivo.addSeparator();
arquivo.add(abrir);
arquivo.addSeparator();
arquivo.add(sair);
edit.add(recortar);
edit.addSeparator();
edit.add(copiar);
edit.addSeparator();
edit.add(colar);
// Jogo a imagem em um Label e posiciono ela
texto = new JLabel(imgDama);
texto.setBounds(180, 50, imgDama.getIconWidth(), imgDama.getIconHeight());
texto.setVisible(true);
this.getContentPane().add(texto);
// add Painel Tabuleiro no Frame
this.getContentPane().add(new Tabuleiro());
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
/* Posicao inicio Tabuleiro
* x=180 y=180
*
* Posicao Final Tabuleiro
* x=495 y=495
*
*/
}
public void addNome(){
nomeuser = JOptionPane.showInputDialog("Digite seu nome: "); // String recebendo o nome a ser digitado
nome.setVisible(true); // deixa Label padrão do user visivel
// label q recebe o nome digitado
nomeori.setText(nomeuser);
nomeori.setVisible(true);
}
/**
* @param args
*/
public static void main(String[] args) {
new Principal().setVisible(true);
}
@Override
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub
String evento;
evento = arg0.getActionCommand();
if(evento.equalsIgnoreCase("Sair")){
System.exit(0);
}
if(evento.equalsIgnoreCase("Novo Jogo")){
addNome(); // executa metodo p/ adicionar nome ao Label
}
}
}
Esse é o Painel onde eu crio o Tabuleiro, com todas as posicoes e casas dele, só pra vc dar uma olhada:
package game;
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.Line2D;
import java.awt.geom.Rectangle2D;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class Tabuleiro extends JPanel {
int i,j;
int size=45;
public Tabuleiro(){
this.setBackground(Color.WHITE);
this.setVisible(true);
}
protected void paintComponent(Graphics g){
super.paintComponent(g);
Rectangle2D.Double r;
Graphics2D g2 = (Graphics2D) g.create();
final BasicStroke stroke = new BasicStroke(10.0f); // falta o formato aqui
float dashes[] = { 10 }; // comprimento do pontilhado em pixels
// cria linhas como bordas do tabuleiro
g2.setPaint(Color.BLACK); // 1ª linha horizontal
g2.draw(new Line2D.Double(180,180,540,180));
g2.setPaint(Color.BLACK); // 1ª linha vertical
g2.draw(new Line2D.Double(180,180,180,540));
g2.setPaint(Color.BLACK); // 2ª linha horizontal
g2.draw(new Line2D.Double(180,540,540,540));
g2.setPaint(Color.BLACK); // 2ª linha vertical
g2.draw(new Line2D.Double(540,540,540,180));
//g2.setStroke(new BasicStroke(4, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND, 10,dashes, 0));
/**
* BasicStroke.CAP_ROUND = extremidades arredondadas
* BasicStroke.JOIN_ROUND = juncao de linhas arredondadas, Ex: em um vertice de um triangulo
* g2.draw(new Line2D.Double(20,30,320,150));
*/
// Usando for pra desenhar em toda a mesa os quad. Pretos
for(i=2;i<6;i++)
for(j=2;j<6;j++){
g2.setColor(Color.BLACK);
r = new Rectangle2D.Double(i*2*size, j*2*size, size, size);
g2.fill(r); // desenha a forma pintada
r = new Rectangle2D.Double(i*2*size+size, j*2*size+size, size, size);
g2.fill(r); // desenha a forma pintada
}
g2.setStroke(stroke); // coloca borda no tabuleiro inteiro(dando errado aqui!)
g2.dispose(); // joga tudo na tela
}
}