Problemas com o Enum talvez

5 respostas
java
S

Glr eu to usando um enum que guarda a stream de cada imagem respectivamente a um id, porém ele ta dando um certo erro na hora de gerar uma imagem, pois o que o código faz é isso aqui:

for(int i = 0; i <= mapa.getWidth()/tamanhoDosPisos; i++) {
        for(int j = 0; j <= mapa.getHeight()/tamanhoDosPisos; j++) {
            
            Random randomiza = new Random();
            valor = randomiza.nextInt(materiais.length);
            
            piso = ImageIO.read(materiais[valor].getStream());
            System.out.println(valor);
            System.out.println("x: " + i*tamanhoDosPisos + ", y: " + j*tamanhoDosPisos);
            g.drawImage(piso,(i*tamanhoDosPisos),(j*tamanhoDosPisos), null);
        }
}

ele gera um valor aleatório e então pega da classe Enum a stream referente a esse id, só que quando eu faço ImageIO,write(…) a imagem só fica toda preta com a penas uma ou duas das imagens desenhadas, aqui o resultado:

Captura%20de%20Tela%20(78)

Mas depois q eu fui na pasta e abrir o arquivo, agr fica normal como deveria aparecer, mas quando gera pela primeira vez a img, a imagem não aparece na pasta antes da aplicação encerrar, então o arquivo não encontra a imagem.

5 Respostas

peczenyj

Assim, eu acho q vc deveria gerar a sua instacia do Random uma vez.

Se vc gera diversas vezes sem nenhuma semente (seed) especifica, corre o risco de vc pegar sempre o mesmo valor.

A sua instância é um gerador de números, use o gerador para pegar uma sequência.

Eu não sei se resolve o seu problema. Mas talvez traga um elemento novo

S

na verdade, não tem problema que eu pegue o mesmo valor varias vezes, pois eu quero que ele repita mesmo as imagens, o problema é que pra carregar a imagem pela primeira vez, pelo o que estou vendo é ir direto na pasta e abrir a imagem uma vez, não entendo pq, além disso, se a imagem não existe, depois que o código cria o ImageIO.write() só cria a imagem depois que a aplicação encerra

peczenyj

Vc esta certo, o construtor do Random da um jeito nisso.

pode postar a parte relativa ao ImageIO.write, talvez vc esteja escondendo alguma exception ou não esteja fechando o arquivo (arquivos abertos precisam ser fechados, para ter certeza que todos os buffers foram esvaziados e o arquivo criado, alem disso existe outros problemas como file descriptor leak, etc)

S

Eu consegui com ajuda de um colega meu mas obg, tive que tirar os inputStream e usei classe File, mas o que eu acho q estava acontecendo pelo que eu analisei foi que, o código ele não tava realmente gerando o arquivo quando chegava na linha do ImageIO.write, ele só gerava depois de um tempo, então enquanto isso o código continuava e procurava o arquivo, mas como o ImageIO não tinha criado ainda, ele não encontrava, então dava o erro, a imagem gerava e a aplicação encerrava, provavelmente a inputstream que eu estava usando, devia ta impedindo de fechar o arquivo ou algo do tipo, mas como ja resolvi melhor ainda, rsrs

S

mas agr to com outro tipo de problema, eu to tentando adicionar um JComponent em um JPanel, mas ele não aparece, só consigo fazer isso no JFrame

Criado 30 de agosto de 2018
Ultima resposta 31 de ago. de 2018
Respostas 5
Participantes 2