.jpg em .jar não funcionando! =(

15 respostas
D

olá!

Estou fazendo um trabalho da faculdade com interfaces gráficas utilizando imagens.
O problema é que quando eu crio o meu .jar ( estou utilizando o eclipse ) as imagens do .jar só funcionam quando ele se encontra na pasta onde está salvo o projeto ( juntamente com as imagens ) … se eu copio o .jar para o desktop ele funciona normalmente, porém as imagens não são carregadas… ele fica sem nenhuma imagem…
… pelo que eu constatei, o problema é que a referência para as imagens está sendo apontada para fora do .jar (por isso se ele estiver na pasta do projeto dele no workspace ele funciona)

como eu estou referênciando e adicionando as imagens(estão dentro de uma pasta chamada “images”):

ImageIcon imagemLogo = new ImageIcon(images\logo.jpg);

JLabel logo = new JLabel(imagemLogo);

primaryPannel.add(logo);

ps. ao abri o .jar, a pasta “images” juntamente com as imagens do projeto se encontram dentro do .jar…

JÁ TENTEI DE TUDO!

…alguem ai sabe o problema?

(talvez tenha alguma coisa a ver com o patch)

abraços![b]

15 Respostas

rodrigo.bossini

Bem, o javadoc do construtor ImageIcon que recebe uma String sugere que você use “/” pra separar os diretorios.

Então ficaria:

ImageIcon imagemLogo = new ImageIcon(images/logo.jpg);

JLabel logo = new JLabel(imagemLogo);

primaryPannel.add(logo);

Parece um detalhe bobo, mas talvez funcione.

Tenta aí e conta o que acontece.

D

rod.attack:
Bem, o javadoc do construtor ImageIcon que recebe uma String sugere que você use “/” pra separar os diretorios.

Então ficaria:

ImageIcon imagemLogo = new ImageIcon(images/logo.jpg);

JLabel logo = new JLabel(imagemLogo);

primaryPannel.add(logo);

Parece um detalhe bobo, mas talvez funcione.

Tenta aí e conta o que acontece.

bah, eu ja tinha tentado isso, uma barra, 2 barras, pra um lado, pro outro… e nada…
com essa barra “/” funciona só no eclipse ou com o .jar na pasta do projeto… fora disso continua sem aparecer as imagens…

(…)

D

…estou pesquisando e eu acho que tem alguma coisa a ver com essas coisas… (mas ainda não descobri!!)

1)Referência dinâmica
2)ClassLoader.getResourceAsStream(tuaImagem)

(…)

D

duedudue:
…estou pesquisando e eu acho que tem alguma coisa a ver com essas coisas… (mas ainda não descobri!!)

1)Referência dinâmica
2)ClassLoader.getResourceAsStream(tuaImagem)

(…)

… pode ser que seja alguma coisa com o manifest… mas també eu não sei mexer nisso!!

HELP!

rodrigo.bossini

Bom, depois de alguns testes, conclui o seguinte:

Duvido que seja o manifest, pq acabei de fazer o teste, e o meu não tem nada de diferente,veja:

Manifest-Version: 1.0
Main-Class: Teste

O que fiz foi o seguinte:

Criei um projeto no eclipse, com uma única classe (“Teste”), que herda de uma JFrame.

Adicionei uma label, responsável por exibir a imagem.

Depois disso, exportei um jar. Funcionou perfeitamente no diretório do eclipse, e também funciona qdo copio o jar para o meu desktop e rodo de lá.

Veja a estrutura do meu jar, talvez você consiga encontrar o que há de diferente no seu:

pasta ( é a pasta que contém minha figura)

META_INF (pasta que contém o manifest.mf, que  contém as duas linhas q coloque acima)

Teste.class

Teste$1.class

.project

.classpath

Outra coisa que fiz de diferente do seu código, iniciei minha label da seguinte maneira:

jLabel1 = new JLabel();
jLabel1.setIcon(new ImageIcon(getClass().getResource(“pasta/figura.jpg”)));

conta aí os resultados, to esperando.

D

rod.attack:
Bom, depois de alguns testes, conclui o seguinte:

Duvido que seja o manifest, pq acabei de fazer o teste, e o meu não tem nada de diferente,veja:

Manifest-Version: 1.0
Main-Class: Teste

O que fiz foi o seguinte:

Criei um projeto no eclipse, com uma única classe (“Teste”), que herda de uma JFrame.

Adicionei uma label, responsável por exibir a imagem.

Depois disso, exportei um jar. Funcionou perfeitamente no diretório do eclipse, e também funciona qdo copio o jar para o meu desktop e rodo de lá.

Veja a estrutura do meu jar, talvez você consiga encontrar o que há de diferente no seu:

pasta ( é a pasta que contém minha figura)

META_INF (pasta que contém o manifest.mf, que  contém as duas linhas q coloque acima)

Teste.class

Teste$1.class

.project

.classpath

Outra coisa que fiz de diferente do seu código, iniciei minha label da seguinte maneira:

jLabel1 = new JLabel();
jLabel1.setIcon(new ImageIcon(getClass().getResource(“pasta/figura.jpg”)));

conta aí os resultados, to esperando.

o meu manifest está com as mesmas 2 linhas, só que a classe principal chama-se App: …

Manifest-Version: 1.0
Main-Class: App

caso eu tente referenciar uma imagem desta forma (getClass().getResource(“pasta/figura.jpg”)));
ocorre um erro de NullPointer =(

(… a classe App não é a classe que referencia as imagens… apenas cria um objeto que referencia as imagens… )

-> eu acho que a solução tem alguma coisa a ver com isso mesmo, pois eu vi em vários lugares isso: getClass().getResource(“pasta/figura.jpg”)));

rodrigo.bossini

Manda o código completo pra eu dar uma olhada.

rodrigo.bossini

Você lembrou de trocar o nome da pasta e da figura de acordo com o que vc tem salvo aí no seu projeto?
A pasta aparece dentro do seu jar, contendo a figura?

D
import javax.swing.*;

import com.sun.xml.internal.bind.v2.runtime.Coordinator;

import java.awt.*;
import java.awt.event.*;
import java.io.*;

public class MainWindow extends JFrame implements ActionListener, MouseListener{
	
	//componentes e containers da janela principal
	private JPanel primaryPannel = new JPanel();
	private JMenuBar menuBar = new JMenuBar();
	private JMenu file = new JMenu("File");
	private JMenu help = new JMenu("Help");
	private JMenuItem New = new JMenuItem("New");
	private JMenuItem save = new JMenuItem("Save");
	private JMenuItem open = new JMenuItem("Open");
	private JSeparator sep = new JSeparator();
	private JMenuItem exit = new JMenuItem("Exit");
	private JMenuItem about = new JMenuItem("About");
	private JMenuItem prices = new JMenuItem("Prices");
	private JMenuItem probability = new JMenuItem("Probability");
	private JMenuItem tutorial = new JMenuItem("Tutorial");
	private JPanel numbersPannel1 = new JPanel();
	private JPanel numbersPannel2 = new JPanel();
	private JButton lucky = new JButton("I'm Feeling Lucky");
	private JButton purchaseTicket = new JButton("Purchase Ticket");
	private JButton clearTicket = new JButton("Clear Ticket");
	private JLabel result = new JLabel("Result:");
	private JTextField resultField = new JTextField(20);
	private JButton go = new JButton("GO!");
	private JButton hist = new JButton("History");
	private JTextArea console = new JTextArea("Welcome to Mega Sena Project!");
	
	//listas com os botões
	private DoubleLinkedList<JCheckBox> betNumbersList = new DoubleLinkedList<JCheckBox>();
	private DoubleLinkedList<JRadioButton> maxMinList = new DoubleLinkedList<JRadioButton>();
	
	//variáveis para setar e consultar os tamanhos, etc
    private int numbersRange = 60;
	private int numbersMax = 15;
	private int numbersMin = 6;
	private int price = 2;
	private int numbersSort = 6;
	private int id = 1;
	private double prize = 0;
	
	//histórico (lista de tiquetes) 
	private HistoryWindow history = new HistoryWindow();
	
	//construtor da classe MainWindow
 	public MainWindow(){
 		
		//seta a barra de menu no jframe
		this.setJMenuBar(menuBar);
		
		//adiciona as barras de menu
		menuBar.add(file);
		file.setMnemonic('F');
		menuBar.add(help);
		help.setMnemonic('H');
		
		//adiciona os itens a cada barra do menu, addActionListener, Mnemonic
		file.add(New);
		New.setMnemonic('N');
		New.addActionListener(this);
		file.add(save);
		save.setMnemonic('S');
		save.addActionListener(this);
		file.add(open);
		open.setMnemonic('O');
		open.addActionListener(this);
		file.add(sep);
		file.add(exit);
		exit.setMnemonic('E');
		exit.addActionListener(this);
		help.add(about);
		about.setMnemonic('A');
		about.addActionListener(this);
		help.add(prices);
		prices.setMnemonic('P');
		prices.addActionListener(this);
		help.add(probability);
		probability.setMnemonic('R');
		probability.addActionListener(this);
		help.add(tutorial);
		tutorial.setMnemonic('T');
		tutorial.addActionListener(this);
		
		//cria o JPanel que será o conteúdo do JFrame
		this.setContentPane(primaryPannel);
		
		//coloca a imagem da mega-sena



//tá aqui o problemaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa






		ImageIcon imagemLogo = new ImageIcon("images/logo.jpg");
		JLabel logo = new JLabel(imagemLogo);
		primaryPannel.add(logo);
	
		//cria o JPanel para os números ficarem em linhas de 10
		numbersPannel1.setLayout(new GridLayout(0,10));
		primaryPannel.add(numbersPannel1);
		
		//método que coloca os botões no JPannel
		buttons1Reload();
		
		//imagem do numbers played
		ImageIcon numbersPlayed = new ImageIcon("images/numbers played.jpg");
		JLabel bar = new JLabel(numbersPlayed);
		primaryPannel.add(bar);
		
		//grid layout para os btões se alinharem em linhas de 10..
		numbersPannel2.setLayout(new GridLayout(0,10));
		primaryPannel.add(numbersPannel2);

		//método para adicionar os outros botões
		buttons2Reload();
		
		//adicionar botões de aposta, setar cor, addActionListener
		lucky.setBackground(java.awt.Color.decode("#14914d"));
		lucky.setForeground(java.awt.Color.decode("#fffafc"));
		primaryPannel.add(lucky);
		lucky.addActionListener(this);
		purchaseTicket.setBackground(java.awt.Color.decode("#14914d"));
		purchaseTicket.setForeground(java.awt.Color.decode("#fffafc"));
		primaryPannel.add(purchaseTicket);
		purchaseTicket.addActionListener(this);
		clearTicket.setBackground(java.awt.Color.decode("#14914d"));
		clearTicket.setForeground(java.awt.Color.decode("#fffafc"));
		primaryPannel.add(clearTicket);
		clearTicket.addActionListener(this);
		
		//campo do resultado
		primaryPannel.add(result);
		primaryPannel.add(resultField);
		resultField.setEditable(false);
		
		//go e history
		primaryPannel.add(go);
		go.addActionListener(this);
		primaryPannel.add(hist);
		hist.addActionListener(this);
		
		//console
		console.setFocusable(false);
		console.addMouseListener(this);
		console.setBackground(new Color(238,238,238));
		console.setSize(420, 50);
		console.setFont(new Font("Tahoma", Font.BOLD, 12 ));
		console.setEditable(false);
		//console.setForeground(new Color(210,41,41)); RED
		console.setForeground(java.awt.Color.decode("#14914d"));
		primaryPannel.add(console);
		
		//ajustes na janela
		this.setResizable(false);
		this.setTitle("Mega Sena Project® 91%");
		this.setLocationRelativeTo(null);
		this.setDefaultCloseOperation(EXIT_ON_CLOSE);
		this.setVisible(true);
		
		//método para ajustar o tamanho
		windowAjuster();
	}
	
	//Ajusta o tamanho da janela principal de acordo com o número de botões
	public void windowAjuster(){
		this.setBounds(1,1,420,264+(((numbersRange-1)/10)*24)+(((numbersMax-numbersMin)/10)*24));
		this.setLocationRelativeTo(null);
	}
	
	//recarrega os JCheckBox na interface (numbersPannel1) e recarrega a lista (betNumbersList) com os JChecBox
	public void buttons1Reload(){
		numbersPannel1.removeAll();
		betNumbersList.clear();
		
		for (int x = 1;x <= numbersRange;x++){
			JCheckBox checkAux = new JCheckBox();
			checkAux.setText(""+x);
			checkAux.setName("nb"+x);
			numbersPannel1.add(checkAux);
			checkAux.addActionListener(this);
			this.betNumbersList.add(checkAux);
		}
	}
	
	//Recarrega os JRadioButtons na interface (numbersPannel2) e atualiza a lista (maxMinList) com os JRadioButtons
	public void buttons2Reload(){
		numbersPannel2.removeAll();
		maxMinList.clear();
		
		//button group dos radios de nro. de nros. apostados
		ButtonGroup radio2 = new ButtonGroup();
		
		for (int x = numbersMin; x <= numbersMax ;x++){
			JRadioButton radioAux = new JRadioButton();
			radioAux.setText(""+x);
			radioAux.setName("nn"+x);
			radio2.add(radioAux);
			numbersPannel2.add(radioAux);
			radioAux.addActionListener(this);
			this.maxMinList.add(radioAux);
		}
	}
	
	//Retorna o radio selecionado(=tamanho da aposta)
	public int getRadioSelected(){
		int radio = 0;
		
		//pega o botão dos radios que está selecionado
		for(int x = 0; x<maxMinList.size();x++){
			if(maxMinList.get(x).isSelected()){
				radio = Integer.parseInt(maxMinList.get(x).getText());
			}
		}
		return radio;
	}
	
	//Retorna o numero de JChecksButtons selecionados
	public int getChecksSelecteds(){
		int checkCount = 0;
		
		//for para percorrer a lista de números e diz quantos estao selecionados
		for(int x = 0; x<betNumbersList.size();x++){
			if(betNumbersList.get(x).isSelected()){
				checkCount++;
			}
		}
		return checkCount;
	}
	
	//metodo de confirmacao e criacao de tickets
	public void ticketCreator(Ticket t){
		t.setSerial(id);
		int option = JOptionPane.showConfirmDialog(null,  
	            "ID: "+t.getSerial()+"\nPrice: "+t.getPrice()+"\nNumbers: "+t.toString()
	            ,"Ticket confirmation", JOptionPane.YES_NO_OPTION);
		if(option == 0){
			history.addTicket(t);
			console.setText("Ticket created successful!");
			prize = prize + t.getPrice();
			clearTicket();
			id++;
		}
		else{
			console.setText("Ticket creation canceled!");
		}
	}
	
	//Retorna uma lista com os numeros selecionados
	public DoubleLinkedList<Integer> getBet(){
		DoubleLinkedList<Integer> bet = new DoubleLinkedList<Integer>();
		
		for(int x = 0; x<betNumbersList.size();x++){
			if(betNumbersList.get(x).isSelected()){
				bet.add(Integer.parseInt(betNumbersList.get(x).getText()));
			}
		}
		return bet;
	}
	
	//Limpa todos os campos da tela 
	public void clearTicket(){
		for (int x = 0; x < betNumbersList.size(); x++){
			betNumbersList.get(x).setSelected(false);
		}
		
		for (int x = numbersMin; x < maxMinList.size(); x++){
			maxMinList.get(x).setSelected(false);
		}
		buttons1Reload();
		buttons2Reload();
	}
		
	//As ações da janela são implementadas aqui
	public void actionPerformed(ActionEvent e){
		
		if(e.getSource() == exit){
			int option = JOptionPane.showConfirmDialog(null,  
	            "Exit, are you sure?", "Exit confirmation", JOptionPane.YES_NO_OPTION);  
			if (option == 0){
			System.exit(0);
			}
		}
		//salva o histórico
		else if(e.getSource() == save){
			binarySaver("main");
			console.setText("Game saved");
		}
		//carrega o histórico
		else if (e.getSource() == open){
			binaryReader("main");
			console.setText("Game loaded");
		}
		//abre um jframe novo para configurar um novo jogo
		else if (e.getSource() == New){
			NewWindow a = new NewWindow(this);
		}
		
		else if(e.getSource() == about){
			JOptionPane.showMessageDialog(null, "Mega Sena Project®, 2008.\n" +
					                            "Created By Eduardo Antunes da Cunha,\n" +
					                            "All Rights Reserved.","About",1);
		}
		else if(e.getSource() == prices){
			JOptionPane.showMessageDialog(null,
			"Nº Numbers      R$\n" +
			"           6             1,75\n" +
			"           7             12,25\n" +
			"           8             49,00\n" +
			"           9             147,00\n" +
			"          10            367,50\n" +
			"          11            808,50\n" +
			"          12            1.617,00\n" +
			"          13            3.003,00\n" +
			"          14            5.255,25\n " +
			"         15            8.758,75\n" +
			" (Source: www.caixa.gov.br)","Prices",2);
		}
		//jframe com o tutorial (só texto) "bonito"
		else if(e.getSource() == tutorial){
			JFrame tuto = new JFrame();
			tuto.setVisible(true);
			tuto.setBounds(1,1,360,240);
			tuto.setResizable(false);
			tuto.setLocationRelativeTo(null);
			tuto.setAlwaysOnTop(true);
			tuto.setTitle("Tutorial");
			JTextArea text = new JTextArea();
			tuto.add(text);
			text.setEditable(false);
			text.setFont(new Font("Tahoma", Font.BOLD, 15 ));
			text.setBackground(new Color(238,238,238));
			text.setText("Welcome to the tutorial!\n" +
					"1) Select File => New.\n"+
					"(If you want to change the game default).\n" +
					"2) Select the \"numbers played\".\n" +
					"3) Choose the numbers you want.\n" +
					"4) Buy the tickets you want.\n" +
					"(\"I'm Feeling Lucky\" & \"Purchase Ticket\")\n"+
					"5) Click \"Go!\" to see the result.\n"+
					"6) You can see the History pressing \"History\".\n"+
					"7) You can change the console color clicking it.");
			
		}
		else if(e.getSource() == probability){
			JOptionPane.showMessageDialog(null,
			"                 Sena             Quina        Quadra\n" +
			"06       50.063.860     154.518        2.332\n" +
			"07         7.151.980        44.518        1.038\n" +
			"08         1.787.995        17.192           539\n" +
			"09            595.998           7.791           312\n" +
			"10            238.399           3.973           195\n" +
			"11            108.363           2.211           129\n" +
			"12              54.182            1.317             90\n" +
			"13              29.182               828             65\n" +
			"14              16.671               544             48\n" +
			"15              10.003               370             37\n" +
			"             =>With 60 Numbers<= \n"+
			"        (Source: www.caixa.gov.br)","Probability",2);
		}
		
		else if (e.getSource() == clearTicket){
			clearTicket();
			resultField.setEditable(true);
			resultField.setText("");
			resultField.setEditable(false);
			console.setText("Ticket cleared!");	
		}
		//se tiver escolhido certinho, compra um tiquete (vai pra janela de compra)
		else if (e.getSource() == purchaseTicket){
			
			if(getRadioSelected() != getChecksSelecteds() ||getRadioSelected() == 0 || getChecksSelecteds() == 0){
				if (getRadioSelected() == 0) setConsoleText("You need choose the numbers before buy the ticket!");
				else setConsoleText("You need to choose "+getRadioSelected()+" numbers to buy a ticket!");
			}
			else{
				Ticket t = new Ticket(getBet(),this);
				ticketCreator(t);
			}
		}
		//Abre a janela de compra de tiquetes com 1 tiquete aleatorio
		//se não foi especificado o "Numbers Played" cria 1 tiquete de tamanho aleatório
		//caso esteja especificado, cria 1 tiquete do tamanho escolhido!
		else if (e.getSource() == lucky){
			Ticket ticket = new Ticket(this);
			
			if(getRadioSelected()==0){
				int rdm = getNumbersMin()+(int)(Math.random()*maxMinList.size());
				ticket.ramdomTicketCreator(rdm);
				ticket.sort();
				ticket.priceCalculator();
				ticketCreator(ticket);
			}
			else{
				int qtd = getRadioSelected();
				ticket.ramdomTicketCreator(qtd);
				ticket.sort();
				ticket.priceCalculator();
				ticketCreator(ticket);
			}
		}
		//Dá o resultado do sorteio, dizendo se houve vencedores, quantos são os vencedores e qual é o prêmio
		else if (e.getSource() == go){
			Ticket t = new Ticket(this);
			t.ramdomTicketCreator(getNumbersSort());
			t.sort();
			resultField.setEditable(true);
			resultField.setText(""+t);
			resultField.setEditable(false);
			
			boolean omfg = false;
			int count = 0;
			int count2 = 0;
			String winnersId = "";
			
			for (int x = 0; x < history.getList().size(); x++){
				count = 0;
				for (int z = 0; z < getNumbersSort(); z++){
					if ( history.getList().get(x).containsBet(t.getBetNumber(z))){
						count++;
						if (count == getNumbersSort()){
							winnersId = winnersId + history.getList().get(x).getSerial()+" ";
							omfg = true;
							count2++;
						}
					}
				}
			}
			
			String aux = "";
		
			if ( omfg  == true){
				JOptionPane.showMessageDialog(null,
				""+count2+" winner(s) with the ticket(s) Id('s):\n"+winnersId+
				"\nThe prize (for each winner) is:\n"+getPrize()/count2
				);
				aux = "\nThis round winner(s) Id: "+winnersId+
				"\nNumbers Sort: "+t+
				"\nTotal prize: "+getPrize()+
				"\nPrize for each winner: "+getPrize()/count2+
				"\n****************\n";
				
				console.setText(count2+" WINNERS!");
			}
			else{ 
				console.setText("No winners today... =(");
				aux = "\nThis round have no winners =("+
				"\nNumbers Sort: "+t+
				"\nAccumulated prize: "+getPrize()+
				"\n****************\n";
			}
			
			history.roundPasser();
			history.addPreviousRounds(aux);
	
		}
		else if (e.getSource() == hist){
			console.setText("History opened...");
			history.toString();
			history.setVisible(true);
		
		}
		//não deixa selecionar JcheckBox sem especificar antes quantos, nem selecionar mais do que essa quantidade
		else if (e.getSource().getClass().equals(new JCheckBox().getClass())){
			console.setText("");
			//armazena a quantidade de JCheckBox selecionados
			int checkCount = getChecksSelecteds();
			
			//armazena o JRadio Selecionado
			int radio = getRadioSelected();
			
			if(radio == 0){
				console.setText("You need to choose the \"Numbers Played\".");
				buttons1Reload();
			}
			
			else if (checkCount > radio){
				console.setText("You can't choose more than "+radio+" numbers.");
				for(int x = 0; x<betNumbersList.size();x++){
					if(betNumbersList.get(x).isSelected() && betNumbersList.get(x).isFocusOwner() ){
						betNumbersList.get(x).setSelected(false);
					}
				}
			}
		}
	}

	public void mousePressed(MouseEvent e) {
    }
	
    public void mouseReleased(MouseEvent e) { 
    }
    
    public void mouseEntered(MouseEvent e) { 
    }
    
    public void mouseExited(MouseEvent e) {  
    }
    
    //Frescura total para mudar a cor do console
    public void mouseClicked(MouseEvent e) {
    	if (e.getSource() == console){
	    	int x,y,z;
	    	x = 1+(int)(Math.random()*255);
	    	y = 1+(int)(Math.random()*255);
	    	z = 1+(int)(Math.random()*255);
	    	console.setForeground(new Color(x,y,z));
    	}
    }
    
    //Salvador da pátria!
	public boolean binarySaver(String nomeArq)
    {
    	try {
    		FileOutputStream gravator = new FileOutputStream(nomeArq+".mega");
    		ObjectOutputStream gravator2 = new ObjectOutputStream(gravator);
    		gravator2.writeInt(price);
    		gravator2.writeInt(id);
    		gravator2.writeInt(numbersRange);
    		gravator2.writeInt(numbersMax);
    		gravator2.writeInt(numbersMin);
    		gravator2.writeInt(numbersSort);
    		gravator2.writeDouble(prize);
    		gravator2.writeObject(history);
    		gravator2.writeObject(this);
    		gravator.close();
    		gravator2.close();
    	}
    	catch(IOException e){
    		System.err.println(e.getMessage());
    		return false;
    	}
        return true;
    }

	//Leitor da pátria!
	public boolean binaryReader(String nomeArq)
    { 
    	try {
    	FileInputStream reader = new FileInputStream(nomeArq+".mega");
    	ObjectInputStream reader2 = new ObjectInputStream(reader);
    	setPrice((int)(reader2.readInt()));
    	setId((int)(reader2.readInt()));
    	setNumbersRange((int)(reader2.readInt()));
    	setNumbersMax((int)(reader2.readInt()));
    	setNumbersMin((int)(reader2.readInt()));
    	setNumbersSort((int)(reader2.readInt()));
    	setPrize((double)(reader2.readDouble()));
    	setHistory((HistoryWindow)(reader2.readObject()));
    	reader.close();
    	reader2.close();
    	buttons1Reload();
    	buttons2Reload();
    	windowAjuster();
    	}
    	catch(ClassNotFoundException cnf) {
    		System.err.println(cnf.getMessage());
    		return false;
    	}
    	catch(IOException e) {
    		System.err.println(e.getMessage());
    		return false;
    	}
        return true;
    }   
    
    //gets e sets!!! (provavelmente devem haver inúteis)
	
	public int getNumbersRange(){
		return numbersRange;
	}
	
	public int getNumbersMax(){
		return numbersMax;
	}
	
	public int getNumbersMin(){
		return numbersMin;
	}
	
	public void setNumbersRange(int x){
		this.numbersRange = x;
	}
	
	public void setNumbersMax(int x){
		this.numbersMax = x;
	}
	
	public void setNumbersMin(int x){
		this.numbersMin = x;
	}
	
	public void setConsoleText(String s){
		this.console.setText(s);
	}

	public DoubleLinkedList<JRadioButton> getMaxMinList() {
		return maxMinList;
	}

	public void setMaxMinList(DoubleLinkedList<JRadioButton> maxMinList) {
		this.maxMinList = maxMinList;
	}
	
	public DoubleLinkedList<JCheckBox> getBetNumbersList() {
		return betNumbersList;
	}

	public void setBetNumbersList(DoubleLinkedList<JCheckBox> betNumbersList) {
		this.betNumbersList = betNumbersList;
	}
	
	public int getPrice() {
		return price;
	}

	public void setPrice(int price) {
		this.price = price;
	}

	public int getNumbersSort() {
		return numbersSort;
	}

	public void setNumbersSort(int numbersSort) {
		this.numbersSort = numbersSort;
	}

	public HistoryWindow getHistory() {
		return history;
	}

	public void setHistory(HistoryWindow history) {
		this.history = history;
	}

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public double getPrize() {
		return prize;
	}

	public void setPrize(double prize) {
		this.prize = prize;
	} 
}

e a classe app…

//Classe responsável pelo início do programa
public class App {
	
	public static void main(String args[]){
		MainWindow mainWindow = new MainWindow();
	}
}

ai ta quase todo o trabalho… >D

hehe

D

tá ai um print screen de onde as imgens estão… estão na pasta images…

parece estar tudo certo… mas não funciona…

x.x


rodrigo.bossini

Tenta o seguinte:

Cria um pacote chamado imagens ( ou o nome que você quiser), e adiciona todo o conteúdo da sua pasta que contém as figuras.
Daí na hora de inicializar a label, vc faz daquele jeito que tava dando nullpointerexception…trata seu package como se fosse uma pasta, como abaixo:

jLabel1.setIcon(new ImageIcon(getClass().getResource("/imagens/figura.jpg")));

imagens é o nome do pacote q vc criou

D

2 imagens explicando o meu problema…

(observe o a falta da imagem “mega sena” no desktop -> ou em qualquer outro lugar que não a pasta do projeto<- )

!!!




rodrigo.bossini

Acho que saquei…sua pasta images tem que estar dentro da pasta bin.

D

rod.attack:
Tenta o seguinte:

Cria um pacote chamado imagens ( ou o nome que você quiser), e adiciona todo o conteúdo da sua pasta que contém as figuras.
Daí na hora de inicializar a label, vc faz daquele jeito que tava dando nullpointerexception…trata seu package como se fosse uma pasta, como abaixo:

jLabel1.setIcon(new ImageIcon(getClass().getResource("/imagens/figura.jpg")));

imagens é o nome do pacote q vc criou

REALMENTE MUITO ORBRIGADO!

FUNCIONOU!

… eu já estava a 2 dias tentando fazer funcionar e nada…

bom… to morto de sono… vou dormir!

muito obrigado mesmo!

=D

o/

kaique

Cara, tenta alterar o path que vocie está colocando para encontrar as imagens para esse valor:

"/../imagens/figura.jpg"

Acho que isso garante que você procure pela pasta images na raiz da estrutura do seu projeto. Outra cois boa seria já colocar a pasta images dentro do classpath, juntamente com as demais classes. Acho que ficaria até mais elegante… :slight_smile:

[]'s.

Criado 25 de novembro de 2008
Ultima resposta 26 de nov. de 2008
Respostas 15
Participantes 3