Problema ao carregar imagem a partir do jar  XML
Índice dos Fóruns » Java Avançado
Autor Mensagem
ViniGodoy
Moderador
[Avatar]

Membro desde: 11/12/2006 08:22:01
Mensagens: 20570
Localização: Curitiba/PR
Offline

aloha wrote:Minha mentalidade é de C, eu penso apenas logicamente, não consigo interpretar conceitos do java. Pra mim se funciona no eclipse teria de funcionar fora também, aprece obvio! Eu não nasci pro java mesmo, só que na faculdade o java é a linguagem escolhida pelos professores :/

Obrigado por enquanto!


Aloha... eu também fui programador C. O Java é tão lógico quanto o C.

É bem simples. Crie uma pasta para os recursos do seu projeto, dentro do seu classpath. Você simplesmente criar um novo pacote entre os seus fontes, mas colocar recursos (jpgs, wavs, etc) lá dentro, ao invés de código.

Vamos supor que seu pacote seja:
aloha.imagens

E que dentro dessa pasta você tenha colocado a imagem "tabuleiro.png".

Para carregar essa imagem você faz:


Com esse método o Java irá seguir as regras de classpath para procurar a sua imagem. Ou seja, no eclipse, ele procurará nos seus arquivos ali onde ele compilou os .class. No caso do .jar, o próprio .jar faz parte do classpath, e ele procurará lá também.

Você não pode é esperar que o construtor default de image, que aceita um "file", faça a busca dentro do .jar para você. Ali sim, é feito para trabalhar com unidades de disco, e seria ilógico se isso fizesse uma busca dentro de um arquivo .jar.

@ViniGodoy - Lattes

Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!

Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).

Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295
[WWW]
aloha
JavaChild

Membro desde: 07/08/2008 15:32:24
Mensagens: 139
Offline

ViniGodoy,

Não posso usar o BufferedImage, tirando isso não entendi mais nada...

"Crie uma pasta para os recursos do seu projeto, dentro do seu classpath" (mas o classpath nao eh um arquivo q fica dentro do jar?)

Ahhhh q droga, ta chegando a hora de entregar o jogo que é em rede e não consigo fazer o "mais facil" que é gerar o jar...

Valew cara, mas se puder ser mais especifico, eu nao quero aprender isso soh kero fazer funcionar!

Abraço
aloha
JavaChild

Membro desde: 07/08/2008 15:32:24
Mensagens: 139
Offline

Consegui, mas mesmo assim ficou muito estranho...

na pasta imagens eu tenho varias imagens, e todas eu estava carregando assim:

labelStatus.setImage(new Image(Display.getDefault(),"imagens/status2.png"));

porem estava dando erro na imagem do tabuleiro, entao fiz oq ViniGodoy falou, ateh a extencao q estava PNG maiusculo tava dando erro :/

tabuleiroComposite.setBackgroundImage(new Image(Display.getDefault(),getClass().getResourceAsStream("/imagens/tabuleiro.PNG")));

entao eu apenas alterei a linha do tabuleiro e funcionou o JAR, eu clico 2x e ele executa perfeitamente, mas pera ae, e as outras imagens? prq nao precisou fazer o mesmo codigo pras demais? essa parte: getClass().getResourceAsStream("/imagens/tabuleiro.PNG")

agora sim nao entendo mais!

Obrigado a todos!
ViniGodoy
Moderador
[Avatar]

Membro desde: 11/12/2006 08:22:01
Mensagens: 20570
Localização: Curitiba/PR
Offline

aloha wrote:Não posso usar o BufferedImage, tirando isso não entendi mais nada...


Como não? O BufferedImage é um Image! Você pode usar sim, senão não teria sugerido!

aloha wrote:"Crie uma pasta para os recursos do seu projeto, dentro do seu classpath" (mas o classpath nao eh um arquivo q fica dentro do jar?)


Não, classpath não é um arquivo. Você está confundindo com o manifest, não?
ClassPath é o caminho onde suas classes estão.

aloha wrote:Ahhhh q droga, ta chegando a hora de entregar o jogo que é em rede e não consigo fazer o "mais facil" que é gerar o jar...

É o mais fácil, desde que você tome alguns cuidados, como usar o getResource() ao invés de ler as imagens direto do disco. Se você ler do disco, faça um zip do seu .jar com a pasta de imagens, e deixe que o usuário descompacte os dois juntos.

Para eu ser mais específico, só se vc zipar seu projeto e colar aqui no GUJ. Aí posso dar uma olhada e ajeitar o que estiver errado.

@ViniGodoy - Lattes

Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!

Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).

Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295
[WWW]
Marky.Vasconcelos
Moderador
[Avatar]

Membro desde: 11/04/2007 18:18:20
Mensagens: 5932
Localização: São Paulo/SP
Offline

ViniGodoy! Aproveitando que voce vai ler esse post me mande o JGF plz. Eu tava procurando a versão que tem o pacote de network mas eu perdi.

Facebook @MarkyHitchhiker +Mark WP: MarkyTech's

Projects:
Android Roadmap - Aprenda Android do inicio (Java é o unico pre-requisito)
Towel ( ObjectTableModel & Swing & Utils )
Tower Defense Game - Java2D [Open-Source] [How-to-play]
EVGD: Programação de jogos (links) Ponto V! - Desenvolvimento de jogos para indies, curiosos e profissionais

DefaultTableModel?! PARE! Não faça isso! Faça melhor!

Dicas: Faça perguntas inteligentes! ; MigLayout ; GridBagLayout (Joke)

Develop games is fantastic, with words you can make worlds!!!

DON'T PANIC!
MarkyHitchhiker's Blog!
[WWW] [MSN]
aloha
JavaChild

Membro desde: 07/08/2008 15:32:24
Mensagens: 139
Offline

ViniGodoy,

quanto usar o "getResource()" tudo bem, quando coloquei ele para carregar o tabuleiro funcionou, mas prq as demais imagens (que eu nao estava usando o getResource()) não estão dando o mesmo erro?

outra dúvida, agora que esta funcionando o JAR (estou clicando 2x e ele abre em qualquer pasta do meu windows) eu passei ele pra outro computador e quando clico 2x la da uma msg de erro dizendo que não achou o main class. Mas como nao se em 1 pc ele acha deveria achar no outro tbm, q desgraça na minha vida!

Obrigado Vinicius
aloha
JavaChild

Membro desde: 07/08/2008 15:32:24
Mensagens: 139
Offline

Desculpem-me se eu ofender mas, as pessoas dizem que o java é portavel e tudo mais, mas até hoje só tive dor de cabeça não consigo executar o mesmo programa nem em outro PC de mesma plataforma :/

Obrigado!
ViniGodoy
Moderador
[Avatar]

Membro desde: 11/12/2006 08:22:01
Mensagens: 20570
Localização: Curitiba/PR
Offline

aloha wrote:Desculpem-me se eu ofender mas, as pessoas dizem que o java é portavel e tudo mais, mas até hoje só tive dor de cabeça não consigo executar o mesmo programa nem em outro PC de mesma plataforma :/


Qual é a versão do Java no outro computador? É a mesma?

O Java é sim, super portável. Aqui rodamos em diversas máquinas, incluindo algumas Linux. Não culpe o Java por sua falta de conhecimento.

Mas você realmente precisa tomar alguns cuidados, para que a portabilidade ocorra sem traumas. Fique tranquilo, são regras mais simples e mais intuitivas do que as de alocação de memória do C. Em pouco tempo, você vencerá essa curva de aprendizado e terá menos estresse.

@ViniGodoy - Lattes

Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!

Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).

Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295
[WWW]
andremello
Smalltalk

Membro desde: 13/05/2010 14:46:05
Mensagens: 1
Offline

Vini, em relação a imagem, eu estava com o mesmo problema... vou tentar contextualizar um pouco: Utilizei o NetBeans 6.7 para desenvolver um projetinho, matar a curiosidade em java. Sei que o classpath é um path relativo o qual matenho toda minha referência de projeto. Sei também que tudo na pasta lib pode estar dentro deste classpath. Levando isso em consideração: coloquei minha pasta /Imagem dentro de um jar, pois ao tentar colocar a pasta /Imagem na lib do meu projeto dentro do net beans durante a construção, a pasta lib desaparecia, não era construida e mesmo que com a sua criação manualmente com todas as dependências a referência não era mantida, mudei até mesmo o manifest.mf para tentar a referência, porém não foi mantida.
Felizmente resolvi o problema com getClass().getResource("/Imagem/imagem.JPG"), porém - mesmo não sendo uma imagem, mas acredito estar dentro do mesmo contexto - o mesmo raciocínio não funcionou para um arquivo help.exe que tentei executar com Runtime.getRuntime().exec("/Help/Help tcc_Help.exe").

nota: Colocar somente o caminho de referência relativo do classpath até os meus arquivos .exe e .JPG não funciona. A imagem consegui carregá-la utilizando o getResource(), porém o .exe nem mesmo assim...

Valeu, espero respostas...
 
Índice dos Fóruns » Java Avançado
Ir para:   
Powered by JForum 2.1.8 © JForum Team