Foro sobre Java SE > problemas con .jar
Lo que publicas es un método, no un ejecutable.
No se sabe cómo están declaradas y asignadas esas variables graf y label.
No entiendo cómo quieres que alguien te ayude a localizar el problema, con una información tan escasa e incompleta.
No voy a postear 800 lineas de código, pero no creo que sea un tema de código por que no tiene sentido.
import java.awt.FlowLayout;
import java.awt.GridLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class Principal {
private static Graficos graf = new Graficos();
private static JLabel label1;
private static JPanel controlPanel;
public static void main(String[] args) {
// TODO Auto-generated method stub
JFrame ventana = new JFrame("Golden Poker");
Teclado teclado = new Teclado();
ventana.add(teclado);
ventana.setSize(800,600);
ventana.setLayout(new GridLayout(3,1));
ventana.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
ventana.add(graf);
teclado.setGraf(graf);
label1 = new JLabel("",JLabel.CENTER);
controlPanel = new JPanel();
controlPanel.setLayout(new FlowLayout());
ventana.add(label1);
ventana.add(controlPanel);
ventana.setVisible(true);
teclado.pasarLabel(label1);
}
}
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JLabel;
import javax.swing.JPanel;
@SuppressWarnings("serial")
public class Teclado extends JPanel{
private Graficos graf;
private JLabel label;
public Teclado(){
KeyListener listener = new KeyListener() {
@Override
public void keyTyped(KeyEvent e) {
}
@Override
public void keyPressed(KeyEvent e) {
System.out.println(e.getKeyCode());
teclaPresionada(e.getKeyCode());
}
@Override
public void keyReleased(KeyEvent e) {
}
};
addKeyListener(listener);
setFocusable(true);
}
public void setGraf(Graficos g){
graf = g;
}
public void pasarLabel(JLabel l){
label = l;
}
private void teclaPresionada(int tecla){
if (tecla == 10){
label.setText("Se presiono Enter");
graf.dibujarFondo();
graf.repaint();
}
if (tecla == 37){
label.setText("Se presiono Izquierda");
graf.dibujarFondo();
graf.repaint();
}
if (tecla == 39){
label.setText("Se presiono Derecha");
}
if (tecla == 40){
label.setText("Se presiono Abajo");
}
if (tecla == 38){
label.setText("Se presiono Arriba");
}
}
}
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.ImageIcon;
import javax.swing.JPanel;
public class Graficos extends JPanel{
/**
*
*/
private static final long serialVersionUID = 1L;
private int anchoCarta = 150;
private int altoCarta = (int) ((8.9*anchoCarta) / 6.4);
private int bordeCarta = 25;
public int numero = 7;
public int figura = 2;
public int posx = 0;
public int posy = 0;
private boolean dibuja = false;
private boolean imagen = false;
private boolean fondo = false;
private boolean personaje = false;
public static int sx = 100;
public static int sy = 150;
private Carta[] cartas;
@Override
public void update(Graphics g){
paint(g);
}
public void dibujarCartas(Carta[] cartas){
this.cartas = cartas;
imagen = false;
dibuja = true;
}
public void cargarImagen(){
imagen = true;
}
public void dibujarFondo(){
fondo = true;
imagen = false;
}
public void dibujarPersonaje(){
personaje = true;
}
public void paint (Graphics g){
int tam = 1;
Color col;
super.paint(g);
if (fondo){
ClassLoader cldr = this.getClass().getClassLoader();
java.net.URL imageURL = cldr.getResource("Imagenes/fondo.jpg");
ImageIcon imagenFondo2 = new ImageIcon(imageURL);
g.drawImage(imagenFondo2.getImage(), 0, 0, 800, 600, null);
setOpaque(false);
super.paintComponent(g);
}
if (personaje){
ImageIcon personaje1 = new ImageIcon(getClass().getResource("/characters/1.jpg"));
ImageIcon personaje2 = new ImageIcon(getClass().getResource("/characters/2.jpg"));
ImageIcon personaje3 = new ImageIcon(getClass().getResource("/characters/3.jpg"));
ImageIcon personaje4 = new ImageIcon(getClass().getResource("/characters/4.jpg"));
ImageIcon personaje5 = new ImageIcon(getClass().getResource("/characters/5.jpg"));
ImageIcon personaje6 = new ImageIcon(getClass().getResource("/characters/6.jpg"));
ImageIcon personaje7 = new ImageIcon(getClass().getResource("/characters/7.jpg"));
ImageIcon personaje8 = new ImageIcon(getClass().getResource("/characters/8.jpg"));
ImageIcon personaje9 = new ImageIcon(getClass().getResource("/characters/9.jpg"));
ImageIcon personaje10 = new ImageIcon(getClass().getResource("/characters/10.jpg"));
ImageIcon personaje11 = new ImageIcon(getClass().getResource("/characters/11.jpg"));
ImageIcon personaje12 = new ImageIcon(getClass().getResource("/characters/12.jpg"));
ImageIcon personaje13 = new ImageIcon(getClass().getResource("/characters/13.jpg"));
ImageIcon personaje14 = new ImageIcon(getClass().getResource("/characters/14.jpg"));
ImageIcon personaje15 = new ImageIcon(getClass().getResource("/characters/15.jpg"));
ImageIcon seleccion = new ImageIcon(getClass().getResource("/imagenes/seleccion.png"));
int px = 100;
int py = 150;
g.drawImage(personaje1.getImage(), px+0, py+0, 106, 106, null);
g.drawImage(personaje2.getImage(), px+120, py+0, 106, 106, null);
g.drawImage(personaje3.getImage(), px+240, py+0, 106, 106, null);
g.drawImage(personaje4.getImage(), px+360, py+0, 106, 106, null);
g.drawImage(personaje5.getImage(), px+480, py+0, 106, 106, null);
g.drawImage(personaje6.getImage(), px+0, py+120, 106, 106, null);
g.drawImage(personaje7.getImage(), px+120, py+120, 106, 106, null);
g.drawImage(personaje8.getImage(), px+240, py+120, 106, 106, null);
g.drawImage(personaje9.getImage(), px+360, py+120, 106, 106, null);
g.drawImage(personaje10.getImage(), px+480, py+120, 106, 106, null);
g.drawImage(personaje11.getImage(), px+0, py+240, 106, 106, null);
g.drawImage(personaje12.getImage(), px+120, py+240, 106, 106, null);
g.drawImage(personaje13.getImage(), px+240, py+240, 106, 106, null);
g.drawImage(personaje14.getImage(), px+360, py+240, 106, 106, null);
g.drawImage(personaje15.getImage(), px+480, py+240, 106, 106, null);
g.drawImage(seleccion.getImage(), sx-7, sy-6, 120, 118, null);
setOpaque(false);
super.paintComponent(g);
}
if (imagen){
ImageIcon imagenFondo = new ImageIcon(getClass().getResource("/Imagenes/principal.jpg"));
g.drawImage(imagenFondo.getImage(), 0, 0, 800, 600, null);
setOpaque(false);
super.paintComponent(g);
}
...
Para la variable fondo usas un direccionamiento relativo del recurso, lo que puede provocar problemas con la estructura de packages del jar.
Por otra lado, no se debe sobreescribir el método paint, sino paintComponent, con la inconsistencia añadida de que llamas al super,paintComponent desde paint.
Lanza el jar desde la consola con java -jar y asi, si esta lanzando errores, los podras ver.
Un saludo
Agradezco sus respuestas pero no me han funcionado !
Hice un nuevo programa para simplificar las cosas.
import java.net.URL;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
public class Principal {
private static JFrame ventana;
public static void main(String[] args) {
// TODO Auto-generated method stub
ventana = new JFrame();
Graficos graf = new Graficos();
ventana.add(graf);
ventana.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
ventana.setSize(400,400);
ventana.setVisible(true);
URL ruta = Principal.class.getResource("Imagenes/fondo.jpg");
JOptionPane.showMessageDialog(null, ruta);
graf.dibujarFondo(ruta);
}
}
import java.awt.Graphics;
import java.net.URL;
import javax.swing.ImageIcon;
import javax.swing.JPanel;
@SuppressWarnings("serial")
public class Graficos extends JPanel {
private URL ruta;
private boolean dibuja = false;
@Override
public void paint(Graphics g){
super.paint(g);
if(dibuja){
dibuja = false;
ImageIcon img = new ImageIcon(ruta);
g.drawImage(img.getImage(), 0, 0, 800, 600, null);
setOpaque(false);
}
}
public void dibujarFondo(URL ruta){
this.ruta = ruta;
dibuja = true;
repaint();
}
}
Cuando ejecuto en eclipse me sale el mensaje del JOptionPane: "file:/C:/Users/Pablo/workspace/TestImagen/bin/Imagenes/fondo.jpg"
y luego me carga la imágen
Cuando genero el .jar en el mensaje de JOptionPane se muestra vacío:
""
Y no me carga ninguna imágen !
¿Alguna otra idea?
Solucionado el tema el error era que la imagen se llamaba fondo.JPG y no fondo.jpg, ojala nunca les pase ! jajajaja
gracias por la ayuda
Hola tengo un problema al generar un .jar en eclipse
tengo el siguiente código
private void teclaPresionada(int tecla){
if (tecla == 10){
label.setText("Se presiono Enter");
graf.dibujarPersonaje();
graf.repaint();
}
if (tecla == 37){
label.setText("Se presiono Izquierda");
graf.dibujarFondo();
graf.repaint();
}
if (tecla == 39){
label.setText("Se presiono Derecha");
}
if (tecla == 40){
label.setText("Se presiono Abajo");
}
if (tecla == 38){
label.setText("Se presiono Arriba");
}
}
Y cuando lo ejecuto en eclipse no tengo problemas, el problema es cuando genero el .jar, nunca me muestra "Se preseiono Enter" ni "Se presiono Izquierda", el tema es que si le borro la linea graf.repaint(); y genero el .jar si me funciona pero obviamente no dibuja la imagen ! Alguien tiene idea de como solucionarlo??? por favor ya intente de todo y ya nose como solucionarlo !