Buscar
Social
Ofertas laborales ES

Foro sobre Java SE > problemas con .jar

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 !

julio 28, 2014 | Unregistered CommenterPablo

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.

julio 28, 2014 | Registered Commenterchoces

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);
}

...

julio 29, 2014 | Unregistered CommenterPablo

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.

julio 29, 2014 | Registered Commenterchoces

Lanza el jar desde la consola con java -jar y asi, si esta lanzando errores, los podras ver.

Un saludo

julio 29, 2014 | Unregistered CommenterUnoPorAhi

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?

julio 30, 2014 | Unregistered CommenterPablo

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

julio 30, 2014 | Unregistered CommenterPablo