Mensagem Original:Salve! Estou com um probleminha com applets: elas rodam no appletviewer mas não no browser.
Eis o código:
importjavax.swing.JApplet;importjavax.swing.*;importjava.awt.*;importjava.awt.event.*;//importa classes necessárias para socketimportjava.io.IOException;importjava.io.PrintStream;importjava.net.Socket;//1importjava.net.*;publicclassLULAextendsJAppletimplementsActionListener{JLabelAvisos;privateJButtonlampada1,lampada2;privateImageimagem=null;ImageIconimagemb;//declara variaveis e objetosSocketSocketCliente=null;//3privatestaticStringPacote,IP="10.8.56.22";//Colocar aqui o IP do Servidor;privatestaticStringUsuario="LULA";privatestaticStringSenha="13";privateStringLampada="";privatebooleanstatus=false;//Obs, implementar verificador de status quando tudo estiver rodando!publicvoidinit(){// método inicial//Avisos = new JLabel("iniciou");//add(Avisos);imagem=getImage(getCodeBase(),"LULA.png");// pega imagem LULA.png e guarda num objeto ImagesetLayout(newFlowLayout());// Layout de fluxo, só para teste//imagem do botaolampada1=newJButton();//declara o botãoif(status==false){imagemb=newImageIcon("interruptoroff.png");//caminho da imagem}else{imagemb=newImageIcon("interruptor.png");//caminho da imagem}lampada1.setIcon(imagemb);// configura a imagem ao botao.lampada1.setPreferredSize(newDimension(imagemb.getIconWidth(),imagemb.getIconHeight()));// para ficar do tamanho da imagemadd(lampada1);lampada1.setVisible(true);//adiciona e seta visivel a lampada1lampada1.addActionListener(this);/* lampada2 = new JButton(); lampada2.setIcon(imagem); // configura a imagem ao botao.lampada2.setPreferredSize(new Dimension(imagem.getIconWidth(),imagem.getIconHeight())); // para ficar do tamanho da imagemadd(lampada2);lampada2.setVisible(true);lampada2.addActionListener(this);*/}publicvoidpaintComponent(Graphicsg){super.paint(g);}publicvoidpaint(Graphicsg){super.paint(g);if(imagem!=null){g.drawImage(imagem,0,0,this);// pinta imagem da lâmpada}}publicvoidenviar(){try{// Avisos.setText("Applet nao asssinada que envia Socket");SocketCliente=newSocket(IP,8000);}catch(IOExceptionex){Avisos.setText("Excecao em socket");}try{Pacote=IP+";"+Usuario+"/"+Senha+" "+Lampada;PrintStreamStreamDeSaidaDeDados=newPrintStream(SocketCliente.getOutputStream());//6StreamDeSaidaDeDados.println(Pacote);// 7StreamDeSaidaDeDados.println(Pacote);// 8//Avisos.setText(Avisos.getText()+"Sucesso!");}catch(IOExceptionexcecao){Avisos.setText("Erro ou na hora de enviar ou na hora de criar dados pelo socket.");// 9}finally{try{SocketCliente.close();//10}catch(IOExceptionexcecao){}}}publicvoidactionPerformed(ActionEvente){if(e.getSource()==lampada1){if(status==false){Lampada="L1Liga";// Avisos.setText("Sala ligada!");status=true;imagemb=null;imagemb=newImageIcon("interruptor.png");}else{Lampada="L1Desliga";//Avisos.setText("Sala Desligada!");status=false;imagemb=null;imagemb=newImageIcon("interruptoroff.png");}lampada1.setIcon(imagemb);// configura a imagem ao botao.enviar();}/*if (e.getSource()==lampada2) { Avisos.setText("Sala desligada!"); Lampada="L1Desliga"; enviar(); }*/}
mas como vc esta tentando rodar no browser?
nao pode ser um erro do seu html mesmo?
S
shamanpyro
Por curiosidade: ela funciona perfeitamente no appletviewer mesmo que eu não declare como JApplet, mas como Applet comum, desde que eu importe todas as classes:
importjavax.swing.JApplet;importjavax.swing.*;importjava.awt.*;importjava.awt.event.*;importjava.applet.*;//importa classes necessárias para socketimportjava.io.IOException;importjava.io.PrintStream;importjava.net.Socket;//1importjava.net.*;publicclassOiMundoextendsAppletimplementsActionListener{JLabelAvisos;privateJButtonlampada1,lampada2;privateImageimagem=null;ImageIconimagemb;//declara variaveis e objetosSocketSocketCliente=null;//3privatestaticStringPacote,IP="10.8.56.22";//Colocar aqui o IP do Servidor;privatestaticStringUsuario="LULA";privatestaticStringSenha="13";privateStringLampada="";privatebooleanstatus=false;//Obs, implementar verificador de status quando tudo estiver rodando!publicvoidinit(){// método inicial//Avisos = new JLabel("iniciou");//add(Avisos);imagem=getImage(getCodeBase(),"LULA.png");// pega imagem LULA.png e guarda num objeto ImagesetLayout(newFlowLayout());// Layout de fluxo, só para teste//imagem do botaolampada1=newJButton();//declara o botãoif(status==false){imagemb=newImageIcon("interruptoroff.png");//caminho da imagem}else{imagemb=newImageIcon("interruptor.png");//caminho da imagem}lampada1.setIcon(imagemb);// configura a imagem ao botao.lampada1.setPreferredSize(newDimension(imagemb.getIconWidth(),imagemb.getIconHeight()));// para ficar do tamanho da imagemadd(lampada1);lampada1.setVisible(true);//adiciona e seta visivel a lampada1lampada1.addActionListener(this);/* lampada2 = new JButton(); lampada2.setIcon(imagem); // configura a imagem ao botao.lampada2.setPreferredSize(new Dimension(imagem.getIconWidth(),imagem.getIconHeight())); // para ficar do tamanho da imagemadd(lampada2);lampada2.setVisible(true);lampada2.addActionListener(this);*/}publicvoidpaintComponent(Graphicsg){super.paint(g);}publicvoidpaint(Graphicsg){super.paint(g);if(imagem!=null){g.drawImage(imagem,0,0,this);// pinta imagem da lâmpada}}publicvoidenviar(){try{// Avisos.setText("Applet nao asssinada que envia Socket");SocketCliente=newSocket(IP,8000);}catch(IOExceptionex){Avisos.setText("Excecao em socket");}try{Pacote=IP+";"+Usuario+"/"+Senha+" "+Lampada;PrintStreamStreamDeSaidaDeDados=newPrintStream(SocketCliente.getOutputStream());//6StreamDeSaidaDeDados.println(Pacote);// 7StreamDeSaidaDeDados.println(Pacote);// 8//Avisos.setText(Avisos.getText()+"Sucesso!");}catch(IOExceptionexcecao){Avisos.setText("Erro ou na hora de enviar ou na hora de criar dados pelo socket.");// 9}finally{try{SocketCliente.close();//10}catch(IOExceptionexcecao){}}}publicvoidactionPerformed(ActionEvente){if(e.getSource()==lampada1){if(status==false){Lampada="L1Liga";// Avisos.setText("Sala ligada!");status=true;imagemb=null;imagemb=newImageIcon("interruptor.png");}else{Lampada="L1Desliga";//Avisos.setText("Sala Desligada!");status=false;imagemb=null;imagemb=newImageIcon("interruptoroff.png");}lampada1.setIcon(imagemb);// configura a imagem ao botao.enviar();}/*if (e.getSource()==lampada2) { Avisos.setText("Sala desligada!"); Lampada="L1Desliga"; enviar(); }*/}}
Obs: O problema não é o socket, pois fiz outra aplicação que usa ele e dá certo. Isso porque faço uma ponte no servidor http://www.guj.com.br/posts/list/97810.java#526293
… alguem tem idéia de pq não abre no browser?? Obrigado!!
Cara, isso deve estar acontecendo pq você esta tentando acessar uma informação que está contida em seu computador. Para você ter esse acesso, é necessário que você assine sua applet. Dessa forma, será permitido que você carregue a imagem.
Da uma procurada por assinar applets aqui no forum, acho que já vi gente colocando posts sobre isso!
Flw
S
shamanpyro
valew pela ajuda, mas as imagens estão no próprio pc que hospeda a applet. Na política de segurança, só há restrições de acesso em outras máquinas não é? E se houvesse na própria máquina, não rodaria no applet viewer. PS: já fiz outras applets com imagens ( portanto, acessam imagens) e funciona perfeitamente no browser.
Obrigado pela resposta :D! Ninguém faz idéia do que seja?
ademarizu
No java console ele deve mostrar a pilha de exceção, tenta dar uma olhada e coloca aqui para nos!
Flw
S
shamanpyro
desculpe a ignorancia mas não intendi o que disse… onde eu pego isso? eu to abrindo pelo textpad
Nesse link ai em cima, é bem completo explicando como assinar o jar.
Depois coloca ai se funcionou ok?
Flw
alucardeck
estranho precisar assinar quando o arquivo é local…
jah fiz alguns applets e nunca precisei…
ademarizu
alucardeck:
estranho precisar assinar quando o arquivo é local…
jah fiz alguns applets e nunca precisei…
Pois é cara, mas pensa bem, se esta rodando em browser poderia estar rodando em qualquer lugar… concordo que poderia ser mais simples mas já que é assim, fazer uq neh? =p
Flw
S
shamanpyro
nossa, eu pensei que tinha algo a ver com o tal de HTML converter… não mexi nisso oO. Bom, amanhã no trampo eu assino, ok? Posto a resposta por volta das 11:00AM. Valew!!
S
shamanpyro
não consegui assinar a applet… to tentando ainda … não sei onde fica user.home.java.policy e com que nome gravo ali.
Outro problema é (veja a figura 6 do tutorial)… faço os passos e diz que não encontra “key”, certifique-se de que keystore está fonfigurado corretamente oO
ademarizu
Cara, tenta o desse tutorial aqui, é bem mais simples e o cara vai bem direto ao ponto, sem falar do arquivo .policy que não é necessário alterar nao.
como não? agora que eu consegui XDDD… ASHUUHASHUASUH a imagem tá pela metade!! não testei as funcionalidades de socket ainda =P mas tá rodando pelo menos
ademarizu
Massa cara! Parabéns!
Acho que o lance da imagem tenta usar uma BufferedImage =D
Flw
S
shamanpyro
haha, valew a força XD!! comecei java esse ano, e já to usando pra linguagem do TCC do técnico to fazendo um sistema que controla componentes eletrônicos via web, pelo jeito vai dar certo!!
S
shamanpyro
Muito Obrigado a todos que ajudaram!!!
S
shamanpyro
Putz! Não tá dando aqui! Na pasta raiz funciona beleza… mas eu tento integrar com o projeto no netbeans(faço uma servlet chamar a applet) e abre blza… mas não aparece o botão!
o diretório é esse aqui:
C:\Documents and Settings\eduardoc\Meus documentos\NetBeansProjects\Bone\web
eu coloco as imagens, as subclasses, a classe no JAR, mas não aparece os botões. Ps: eles aparecem no firefox, mas no IE nem na pasta /bin do java funciona alguem sabe o que pode ser de errado?
ademarizu
Opa cara, o que não esta aparecendo são as imagens ou os botões mesmo?
Pq se for as imagens, é pq você está carregando elas de dentro do jar e isso não funciona tão bem não. Vc tem que carregar as imagens da seguinte forma:
Lembrando que nesse exemplo, as imagens estão na raiz do meu jar, se vc tiver uma hierarquia de pastas terá que respeitá-la para achar a imagem. Você também pode criar um jar separado com as imagens. Para carregá-lo, basta fazer da mesma forma, lembrando que o mesmo deverá estar no classpath.
Flw e boa sorte ai!
S
shamanpyro
tipo, o botão não aparece por inteiro. Se a imagem não tiver carregando, o botão some?
S
shamanpyro
Não faz sentido…
:arrow:Roda no Firefox, com os 3 botoes teste( um botao redondo, um JButton, e o JButton do Interruptor que redimenciona e fica do tamanho da imagem)
:arrow: não roda o botao com interruptor no IE
:arrow: se for chamado pela servlet, mesmo no firefox não roda o botao com o interruptor =/
ademarizu
O console não ta lançando nenhuma exceção não?
Porque realmente está estranho essa situação.
Só uma pergunta, como você está carregando as imagens? ImageIcon normal? Ou tu ta usando o BufferedImage?
[]'s
S
shamanpyro
uma to carregando por Image(essa ta funfano) e outra por ImageIcon ( nao tá =( )
ademarizu
Coloca aqui como você ta fazendo para carregar as imagens.
[]'s
S
shamanpyro
importjavax.swing.JApplet;importjavax.swing.*;importjava.awt.*;importjava.awt.event.*;//importa classes necessárias para socketimportjava.io.IOException;importjava.io.PrintStream;importjava.net.Socket;//1importjava.net.*;publicclassLULAextendsJAppletimplementsActionListener{publicJButtonlampada1,lampada2;JLabelAvisos;publicImageimagem=null;ImageIconimagemb;RoundButtonb1;//declara variaveis e objetosSocketSocketCliente=null;//3privatestaticStringPacote,IP="10.8.56.22";//Colocar aqui o IP do Servidor;privatestaticStringUsuario="LULA";privatestaticStringSenha="13";privateStringLampada="";privatebooleanstatus=false;//Obs, implementar verificador de status quando tudo estiver rodando!publicvoidinit(){// método inicial//Avisos = new JLabel("iniciou");//add(Avisos);b1=newRoundButton(" ",-3.14546);add(b1);imagem=getImage(getCodeBase(),"LULA.png");// pega imagem LULA.png e guarda num objeto ImagesetLayout(newFlowLayout());// Layout de fluxo, só para testelampada2=newJButton("teste");add(lampada2);//imagem do botaolampada1=newJButton();//declara o botãoif(status==false){imagemb=newImageIcon("liga.png");//caminho da imagem}else{imagemb=newImageIcon("desliga.png");//caminho da imagem}lampada1.setIcon(imagemb);// configura a imagem ao botao.lampada1.setPreferredSize(newDimension(imagemb.getIconWidth(),imagemb.getIconHeight()));// para ficar do tamanho da imagemadd(lampada1);lampada1.setVisible(true);//adiciona e seta visivel a lampada1lampada1.addActionListener(this);/* lampada2 = new JButton(); lampada2.setIcon(imagem); // configura a imagem ao botao.lampada2.setPreferredSize(new Dimension(imagem.getIconWidth(),imagem.getIconHeight())); // para ficar do tamanho da imagemadd(lampada2);lampada2.setVisible(true);lampada2.addActionListener(this);*/}publicvoidpaintComponent(Graphicsg){super.paint(g);}publicvoidpaint(Graphicsg){super.paint(g);if(imagem!=null){g.drawImage(imagem,0,0,this);// pinta imagem da lâmpada}}publicvoidenviar(){try{// Avisos.setText("Applet nao asssinada que envia Socket");SocketCliente=newSocket(IP,8000);}catch(IOExceptionex){Avisos.setText("Excecao em socket");}try{Pacote=IP+";"+Usuario+"/"+Senha+" "+Lampada;PrintStreamStreamDeSaidaDeDados=newPrintStream(SocketCliente.getOutputStream());//6StreamDeSaidaDeDados.println(Pacote);// 7StreamDeSaidaDeDados.println(Pacote);// 8//Avisos.setText(Avisos.getText()+"Sucesso!");}catch(IOExceptionexcecao){// Avisos.setText("Erro ou na hora de enviar ou na hora de criar dados pelo socket."); // 9}finally{try{SocketCliente.close();//10}catch(IOExceptionexcecao){}}}publicvoidactionPerformed(ActionEvente){if(e.getSource()==lampada1){if(status==false){Lampada="L1Liga";//Avisos.setText("Sala ligada!");status=true;imagemb=null;imagemb=newImageIcon("liga.png");}else{Lampada="L1Desliga";//Avisos.setText("Sala Desligada!");status=false;imagemb=null;imagemb=newImageIcon("desliga.png");}lampada1.setIcon(imagemb);// configura a imagem ao botao.enviar();}/*if (e.getSource()==lampada2) { Avisos.setText("Sala desligada!"); Lampada="L1Desliga"; enviar(); }*/}}
ademarizu
Tenta carregar as imagens assim:
BufferedImage image = ImageIO.read(LULA.class.getClassLoader().getResource(“liga.png”));
imagemb = new ImageIcon(image);
Para ver o que acontece.
S
shamanpyro
Ok, amanhã cedo eu posto o resultado que aqui no trampo ta osso… vlw!! ^^
S
shamanpyro
qual classe devo importar pra usar buffered image?
ademarizu
Tu não ta usando uma ide não? Em geral a ide já faz os imports para você. Mas de qq forma, o imports seriam esses:
mais uma vez vc estava certo! carregou o botão, pena que quando clica ele perde a imagem.to trabalhando pra concertar esse bug =P… axo que ja sei o problema, qndo clika eu usava ImageIcon direto e não buffered Image ^^
ademarizu
Blz então cara!
Boa sorte ai!
Flw
S
shamanpyro
Funcionou perfeitamente! Mew, vc é graduado?
ademarizu
Sou graduado desde 2006, GRAÇAS A DEUS! =D
S
shamanpyro
por isso vc manja tanto… to no técnico ainda dou-me por satisfeito de ta arriscando em JAVA =P o pessoal tá fazendo TCC tudo em VB… só da eu JAVA ^^
ademarizu
Nem manjo tanto assim não cara. Java abrange tanta coisa que não tem como o cara ser expert em tudo. No meu caso eu ja trabalhei em muitos projetos com Swing e alguns com Applet, por isso foi mais fácil te ajudar.
Bom cara, so desejo sorte pra você! Quando você tiver dúvidas, eu e várias outras pessoas mais capacitadas aqui do GUJ poderão te ajudar!
Flw!
S
shamanpyro
Muito obrigado pela paciência e pela ajuda!! Tudo de bom!! Valew mesmo