[quote=steveVai]Olá vamos ver se entendi o seu caso.
Está estranho pois no seu código você coloca um caminho que corresponde o local onde está seu código fonte “.java”, porém você utiliza o getClass().getResourceAsStream que sempre irá retorna o diretório onde está armazenado seus arquivos .class.
Dessa forma não vai funcionar.
Caso queira ler as imagens do local onde estão seus arquivos .class, você não coloca o caminho do diretório e sim especifica somente o arquivo que queira ler. Exemplo:
InputStream origem = getClass().getResourceAsStream("JList.png");
Se desejar ler realmente as imagens do local onde estão seus fontes “.java”, me diga ai vou pesquisar aqui como recupera esse caminho. Mas para não deixar você na mão segue uma alternativa não muito correta do ponto de vista de programação, porém “quebrará se galho”.
String file = "/src/testes";
System.out.println(System.getProperty("user.dir") + file) ;
Abraços[/quote]
steve voce e muito inteligente testei o que voce disse e funcionou nossa eu nao tinha lido direito desculpa … voce tgambem disse qeu essa nao era a melhor forma… porquenao é?
Vamos por partes…
Esse getClass vai pegar a classe onde você está chamando o teu código. Duas perguntas:
getClass().toString() imprime o que?
Qual o nome da tua classe e o package onde ela se encontra?
[quote=Bruno Laturner]Vamos por partes…
Esse getClass vai pegar a classe onde você está chamando o teu código. Duas perguntas:
getClass().toString() imprime o que?
Qual o nome da tua classe e o package onde ela se encontra?
[/quote]
o problema e muito estranho, faço no eclipse aqui em casa e funciona mas no eclipse do serviço so da nullpointer o mesmo metodo pois nao acha o caminho, do projeto A quero acessar a imagem que esta no projeto B mas nao acha porem se coloco a imagem no projeto A tambem dai funciona
[quote=Bruno Laturner]Vamos por partes…
Esse getClass vai pegar a classe onde você está chamando o teu código.[/quote]
como assim
??
o nome da classe que estou chamando executando
Um projeto de exemplo para você entender como funciona essa pesquisa de recursos.
Basicamente ele procura pelo recurso dentro do classpath onde o teu programa está rodando, com endereços relativos ou absolutos à classe por onde você está chamando o getResourceStream. Se você chamasse esse método de outra classe em outro pacote, o caminho relativo mudaria.
Note que dentro desse projeto, eu configurei o jar para estar no mesmo classpath da aplicação quando ela roda no Eclipse.
o problema acontece quando executo de outro projeto, dai ele pega o caminho do outro projeto, nao?
e tambem imprimi um monte de %%%% no meio da url
Pode postar qual pedaço do teu código imprime isso?
System.out.println(ConstrucaoRevistas.class.getClass().getResource("/").getFile());
imprime:
/C:/Users/maria/Desktop/Kit%20Automatiza%c3%a7%c3%a3o%20de/Eclipse%20Juno%20com%20integra%c3%a7%c3%a3o%20SVN/Reposit%c3%b3rio/Revistas/bin/
deveria pegar o resource/src, nao?
Pelo q entendi vc vem tentando opções diversas e nenhuma realmente funcionou, como estas:
URL resource = classLoader.getResource("/");
URL resource = SOME_CLASS.class.getResource("/");
URL resource = this.getClass().getResource("/");
Fonte: http://www.coderanch.com/t/463550/java/java/determine-current-path-classloader
Está dando NullpointerExceptoin ou vindo o caminho c/ representação porcentagem (ex: %20 q equivale ao espaço)
Dá uma olhada na pasta bin do teu projeto no Eclipse, lá ficam os arquivos java já compilados como .class.
bin é a raiz do teu classpath, e é de lá que o Eclipse roda o teu programa. Note que não existe src dentro desse bin.
Se por exemplo você tiver a classe br.com.minhaempresa.ConstrucaoRevistas, dentro do bin deve ter as pastas br/com/minhaempresa com um ContrucaoRevistas.class dentro dela.
Se você colocar um arquivo texto em bin, tipo bin/texto.txt e você fizer
ConstrucaoRevistas.class.getClass().getResource("/texto.txt"), este pedaço de código vai retornar o URL desse texto.txt
Se você colocar outro arquivo texto, em outro lugar dentro de bin, por exemplo em bin/resources/texto2.txt e fizer:
ConstrucaoRevistas.class.getClass().getResource("/resources/texto2.txt"), ele pega esse texto2.txt
Se você colocar outro arquivo texto, em outro lugar dentro de bin, por exemplo na mesma pasta onde está o teu ConstrucaoRevistas.class:
bin/br/com/minhaempresa/texto3.txt
ConstrucaoRevistas.class.getClass().getResource(“texto3.txt”), ele pega esse texto3.txt. Não precisa colocar a pasta onde ele está por que ele se encontra no mesmo nível do .class.
nao sei mais oque faço quando coloco o exemplo que voce deu em um System.out.print(url); imprime null fiz exatament o que voce pediu
c:/eclipse%20da%20mari/workspace/projeto%20revistasExecucao/bin/br/uol/revistas/Principal.class
c:/eclipse%20da%20mari/workspace/projeto%20revistasExecucao/bin/br/uol/revistas/uolLogo.png
Então tenta o seguinte:
getClass().getResource("/br/uol/revistas/uolLogo.png")
[quote=Bruno Laturner]Então tenta o seguinte:
getClass().getResource("/br/uol/revistas/uolLogo.png")[/quote]
imprimi null
Ok, se isso deu errado, então não tenho mais nenhuma idéia de como arrumar o teu problema :lol:
Vamos lá, esclareçamos as questões:
1 - Exceção Nullpointer neste caso é lançado qdo. não se encontra o arquivo;
2 - Estão aparecendo porcentagem e etc pelo fato de sua workspace o caminho completo possuir espaços e acentos, definitivamente
evite pois já tive problemas de perder horas e no final era um mldt* acento, sério! Hehehe…
E 3 - Recomece passo-a-passo conforme orientamos aqui nos posts q tem de funcionar.
Ok?
[quote=mariazinhahappy] URL Diretorio = this.getClass().getResource("/src/br/uol/revistas/imagens");
System.out.println(Diretorio.getPath());
da nullpointer tambeimn[/quote]O que retorna quando você chama esse mesmo comando passando uma String vazia?
URL Diretorio = this.getClass().getResource("");
System.out.println(Diretorio.getPath());
Aliás, se não me engano, não pode usar o / no início da string (se eu estiver certo, o Java entenderia como C:\src…)
Normalmente não é boa prática apontar para a pasta src dentro do código pois, ao gerar o compilado, essa pasta costuma NÃO acompanhar o sistema.