Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1

    Chiudere browser da java

    Ciao ragazzi,
    esiste un modo per chiudere il browser da un applicazione java.

    So come aprirle una pagina web:

    codice:
    java.awt.Desktop.getDesktop().browse(new URI(decodedText));
    Ma ora vorrei anche gestire la chiusura della pagina web per tornare alla mia applicazione...

    Sapete come fare?

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Chiudere browser da java

    Originariamente inviato da VioletFairy
    So come aprirle una pagina web:

    codice:
    java.awt.Desktop.getDesktop().browse(new URI(decodedText));
    Ma ora vorrei anche gestire la chiusura della pagina web per tornare alla mia applicazione...

    Sapete come fare?
    Con browse() di Desktop sicuramente no, perché non ritorna nulla, quindi non hai alcun riferimento a cosa ha lanciato.

    Se fosse un processo lanciato tramite exec() di Runtime o ProcessBuilder avresti un Process su cui invocare destroy() (che comunque sarebbe una terminazione "brutale" quindi da prendere con le pinze). Ma sarebbe comunque fumoso lanciare il processo.

    Quindi no, in linea generale non c'è modo ... a meno di "sapere" certe cose su quale browser è stato avviato e magari usando API del sistema. Detto in altro modo: non c'è nulla di standard, veloce e portabile per farlo.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3

    Re: Re: Chiudere browser da java

    Originariamente inviato da andbin
    Se fosse un processo lanciato tramite exec() di Runtime o ProcessBuilder avresti un Process su cui invocare destroy() (che comunque sarebbe una terminazione "brutale" quindi da prendere con le pinze). Ma sarebbe comunque fumoso lanciare il processo.
    Che cosa intendi per fumoso?

    Mi potresti fare un esempio di come aprire una pagina web tramite exec()? (Se non ti chiedo troppo... )

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Re: Re: Chiudere browser da java

    Originariamente inviato da VioletFairy
    Che cosa intendi per fumoso?
    Beh, la questione è che la cosa diventa innanzitutto system-dependent!
    A exec() devi passare innanzitutto il path di un eseguibile .... quello del browser, in questo caso. Quale è? Dipende dal S.O. e anche sapendo il S.O. ... dipende! Firefox (o altro specifico)? Devi sapere che c'è e dove è installato. Internet Explorer? Sarebbe già un po' più semplice ma comunque bisogna "sapere" qualcosa.

    Originariamente inviato da VioletFairy
    Mi potresti fare un esempio di come aprire una pagina web tramite exec()? (Se non ti chiedo troppo... )
    codice:
    Runtime rt = Runtime.getRuntime();
    String[] command = { "C:\\Programmi\\Mozilla Firefox\\firefox.exe", "http://www.google.com" };
    Process p = rt.exec(command);
    Poi p.destroy(); dove serve.

    Ma:
    1) Devi "sapere" dove è l'exe del browser. Quindi è system-dependent e pure dipendente dalla installazione specifica fatta e oltretutto il path sopra l'ho pure "cablato" nel sorgente.
    2) Come passare gli argomenti, in questo caso l'indirizzo, può dipendere dal browser.
    3) Il destroy() comunque è da prendere/usare molto con le "pinze".

    Tutto questo .... è fumoso!
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Ok, capisco! Cmq mi sei stato di grande aiuto... Come sempre del resto!

  6. #6
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320

    Re: Chiudere browser da java

    Originariamente inviato da VioletFairy
    Ma ora vorrei anche gestire la chiusura della pagina web per tornare alla mia applicazione...
    Se il tuo intento, con questa frase, è di "attendere che l'utente chiuda la finestra", prima di proseguire con l'esecuzione del programma, allora, assunto quanto già detto da andbin, controlla il metodo waitFor() della classe Process.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  7. #7
    Ho un problemino però....

    Se io chiamo in dal mio codice Java tramite la exec() un'applicazione (chiamiamola SecondApp) un pò più pesante di firefox, quest'ultima si impalla finchè non chiudo la finestra relativa alll'interfaccia grafica della mia applicazione...

    Se però chiamo chiamo SecondApp e la mia applicazione Java separatamente ma contemporaneamente non si impalla niente.

    Sembra come se le risorse necessarie da SecondApp siano gestite dalla mia applicazione che non ce la fa a gestire le due applicazioni insieme.

    Nn c'è modo per lanciare un'altra applicazione e non curarsi più di lei?

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da VioletFairy
    Se io chiamo in dal mio codice Java tramite la exec() un'applicazione (chiamiamola SecondApp) un pò più pesante di firefox, quest'ultima si impalla finchè non chiudo la finestra relativa alll'interfaccia grafica della mia applicazione...

    Se però chiamo chiamo SecondApp e la mia applicazione Java separatamente ma contemporaneamente non si impalla niente.

    Sembra come se le risorse necessarie da SecondApp siano gestite dalla mia applicazione che non ce la fa a gestire le due applicazioni insieme.

    Nn c'è modo per lanciare un'altra applicazione e non curarsi più di lei?
    La exec() di per sé è "asincrona". Ritorna praticamente subito e non attende mai la terminazione di ciò che ha lanciato.
    È il waitFor() di Process che attende la terminazione del processo lanciato. Lo fa sospendendo il thread corrente. Se il thread corrente fosse il EDT (event dispatch thread), cioè quello usato per invocare i metodi dei listener ..... tu lo stai praticamente "impegnando" (tenendolo sospeso) e quindi in pratica tutta la tua interfaccia utente è "congelata".
    Ma non è un problema della exec o del processo lanciato .... ma del threading in Swing!
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  9. #9
    Mmm... Cmq è l'interfaccia utente di secondApp che si impalla, e non della mia applicazione Java da cui chiamo secondApp...

    E c'è un modo per risolvere questo problemino?

  10. #10
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da VioletFairy
    Cmq è l'interfaccia utente di secondApp che si impalla, e non della mia applicazione Java da cui chiamo secondApp...
    Allora la questione è differente. Serve sapere una cosa: secondApp che lanci fa dell'output sullo standard-output/error?? (o al contrario si aspetta qualcosa sullo standard-input?)
    Se ne fa ... la tua applicazione Java deve leggerlo (attraverso gli stream forniti da Process) altrimenti per questioni di buffering la applicazione lanciata può appunto bloccarsi.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.