Eu queria saber se alguém tem alguma dica de como fechar o browser sem dar o comando System.exit(0);, pois este fecha todas as janelas abertas.
<Applet>Fechar o browser sem o System.exit(0);
11 Respostas
Não sei se você pode fazer o equivalente Javascript a “window.close()”.
Experimente…
É algo como:
import netscape.javascript.*;
…
JSObject jso = JSObject.getWindow (this); // onde this é o applet
jso.eval (“window.close();”);
…
e o applet deve ter um atributo MAYSCRIPT, tal como < applet … … mayscript = “” >
A classe netscape.javascript.* está em plugin.jar, ou jaws.jar, na sua instalação do JDK.
Se você está usando o Java da Microsoft, essa classe está em algum dos .zip de \windows\java\packages.
apesar de ser uma ótima solução, somente funciona no IE, mas eu gostaria de saber algum comando que fosse multiplataforma.
Pergunta boba número 1 - como é que você fecharia a janela corrente em Javascript, usando o browser para a qual o código sugerido não funcionou? Pode ser que o browser que você esteja usando para testar não esteja permitindo o uso de “window.close”. Nesse caso você deve achar um código equivalente que feche a janela para você.
Isto é obvio, mas em um browser como o firefox dispararia uma mensagem pedindo se quer mesmo que feche, e isso é indesejável.
Esse é o problema.
Você na verdade não deveria passar por cima do browser (aliás, porque é que o plugin ainda consegue derrubar o browser inteirinho usando System.exit()? Isso não deveria acontecer.)
Applets em tese não deveriam ter o poder de fazer coisas que o browser proibiria (como usar window.close() sem avisar).
Talvez alguém tenha resolvido o problema, mas não sei lhe dizer como é que faríamos sem chamar “window.close().” Passo a pergunta “aos universitários”.
Gostaria de saber se não tem como fazer tipo:
Container c = this.getParent();
while(c != null)
{
c = c.getParent();
}
e no último container que ele pegar, atribuir um evento a ele que fecharia a janela??
Hum, pelo que eu acho, isso vai só fechar o próprio applet, não o browser, mas não custa nada tentar.
É que tecnicamente o applet está “hospedado” no browser; no caso do IE ele é um ActiveX Control, e no caso do Mozilla é um XPI, e a partir de um determinado nível, quem controla as coisas é o IE ou Mozilla, não o Java.
Não sei como fazer para fechar o browser como voce quer, mas pode contornar o problema de outra forma:
quando voce chamar a applet ela o que faz é abrir uma Window ou JWindow e todo o trabalho é feito nesta janela e no fim do trabalho é só fazer um this.dispose(); e a janela é fechada.
Nossa… fiquei triste agora… testei aqui e o System.exit(0) não só fechou o meu firefox atual, mas como todos os outros que estavam abertos… se fosse só no IE beleza, mas no firefox também é zuado…
O System.exit(0) tem esse problema. Tecnicamente o que ocorre: o Plugin é carregado, tanto pelo IE como pelo Mozilla, como se fosse uma .DLL (ou .SO), rodando no mesmo processo do IE (ou Mozilla, ou Firefox etc.).
Se você executar System.exit(), estará finalizando o processo (ou seja, como efeito colateral, fechando as janelas do processo do browser).
Olhando no Task Manager você vê que o IEXPLORE.EXE ou NETSCP.EXE ou MOZILLA.EXE ou FIREFOX.EXE caem; no Linux, que ps -ef mostra que o process mozilla ou firefox ou netscp caem.
Queria reviver o assunto, pois ainda estou precisando e apesar de chegar perto, muito perto, não consegui ainda fazer um comando genérico para fechar somente o browser onde está a applet. Se alguém conseguir, pleeeeeeeeeaaaaaaaaassssssseeeeeeeeeeee!!!