IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

API standards et tierces Java Discussion :

Ne pas afficher le navigateur lors de telechargement


Sujet :

API standards et tierces Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2018
    Messages
    150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2018
    Messages : 150
    Par défaut Ne pas afficher le navigateur lors de telechargement
    Bonsoir a tous,

    en gros tout est dans le titre.
    $je désire savoir comment je pourrais ne pas afficher la fenêtre du navigateur lorsqu'en cliquant sur mon bouton OK de mon app, je lance une succession de téléchargement de fichier depuis une URL.
    j'ai essayé avec this.setVisible(false); mais ca ne marche pas.

    merci par avance pour votre aide.

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Salut,

    Il faudrait nous préciser quel type d'application et en particulier d'UI (Swing, JavaFX, console, autre...). Ou nous montrer du code aussi pour voir comment tu procèdes à ce téléchargement via URL. Normalement, les techniques courantes (URL.openStream, ou en passant par HttpClient par exemple) n'affichent aucun navigateur parce qu'elles ne passent pas par un navigateur.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2018
    Messages
    150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2018
    Messages : 150
    Par défaut
    bonjour joel,

    je travaille sur Mac, et google mon navigateur.

    voici le bout de code ci dessous:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
     
    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
     
     
                          try {
     
                                      String SV;
                       SV = jComboBox1.getSelectedItem().toString();
                       String leftlon; String rightlon; String toplat; String bottomlat;
                       leftlon = jTextField1.getText();
                       rightlon = jTextField2.getText();
                       toplat = jTextField3.getText();
                       bottomlat = jTextField4.getText();
     
                LocalDate localdate;
            localdate = LocalDate.now();
                    String d = localdate.format(DateTimeFormatter.BASIC_ISO_DATE);
                       String URL1;  String URL1B;                                       
                       String URL3;  String URL3B; String URL3D; String URL3F; String URL3H; 
                       String URL4;
     
                                URL1 = "https://nomads.ncep.noaa.gov/cgi-bin/filter_gfs_0p50.pl?file=gfs.t";                               
                                    URL1B = "z.pgrb2full.0p50.";
                                        URL3 = "&lev_1000_mb=on&lev_250_mb=on&lev_300_mb=on&lev_400_mb=on&lev_500_mb=on&lev_700_mb=on&lev_750_mb=on&lev_850_mb=on&var_TMP=on&var_UGRD=on&var_VGRD=on&subregion=&leftlon=";
                                            URL3B = "&rightlon=";
                                                URL3D = "&toplat=";
                                                    URL3F = "&bottomlat=";                                                                  
                                                        URL3H ="&dir=%2Fgfs.";  
                                                            URL4 = "%2F";                      
     
                           for(int i = 0; i <= 10; i+=3)
    java.awt.Desktop.getDesktop().browse(java.net.URI.create(URL1+ SV +URL1B+"f00"+ i+URL3 +leftlon +URL3B +rightlon +URL3D+ toplat +URL3F +bottomlat +URL3H +d +URL4 +SV));
     
     
            String hr; 
         hr = jComboBox2.getSelectedItem().toString();
          int result;
     
                              result = Integer.parseInt(hr);
                                  for(int i =12 ;i <= 102; i+=3)
                                      if ((result>=12) && (i<=100) && (i<=result)) {
                              java.awt.Desktop.getDesktop().browse(java.net.URI.create(URL1+ SV+URL1B+"f0"+ i+URL3 +leftlon +URL3B +rightlon +URL3D+ toplat +URL3F +bottomlat +URL3H +d +URL4 +SV));
     
         }
                              if (result >102) {
                                        for (int i =102 ; i <= result; i+=3)
                              java.awt.Desktop.getDesktop().browse(java.net.URI.create(URL1+ SV +URL1B+"f"+ i+URL3 +leftlon +URL3B +rightlon +URL3D+ toplat +URL3F +bottomlat +URL3H +d +URL4 +SV));
     
                          }
     
    dispose();
     
     
                 } catch (IOException | NumberFormatException e) {
                       JOptionPane.showMessageDialog(null,e.getMessage());
     
                  }
     
        }

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    C'est du Swing déjà.

    java.awt.Desktop.getDesktop().browse() est une commande qui sert à lancer un navigateur, donc forcément ça ouvre un navigateur, celui par défaut de la plateforme ! Ce n'est pas fait pour faire du téléchargement. Et si ça télécharge, c'est juste si l'URL pointe vers une ressource qui dispose d'un Content-Disposition avec attachement, sinon ça s'affiche dans le navigateur, selon les modalités du navigateur, ce qui peut être fastidieux pour l'utilisateur.

    Pour télécharger une ressource via une URL, en version simple (ça charge directement le body dans le système de fichier (ici dans l'exemple l'image du logo DVP) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    public class DownloadFromURL {
     
    	public static void downloadFromURL(URL url, Path target, CopyOption...options) throws IOException {
    		try(InputStream inputStream = new BufferedInputStream(url.openStream())) {
    			Files.copy(inputStream, target, options);
    		}
    	}
     
    	public static void main(String[] args) {
    		String url = "https://www.developpez.com/template/images/logo-dvp-h55.png";
    		String target = "logo-dvp.png";
     
    		try {
    			downloadFromURL(URI.create(url).toURL(), Paths.get(target), StandardCopyOption.REPLACE_EXISTING);
    			System.out.println("Fichier téléchargé : " + Paths.get(target).toAbsolutePath());
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
     
    	}
     
    }
    Pour télécharger en tenant compte des attachements :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    public static void downloadFromURL(URL url, Path targetDirectory, Path defaultTarget) throws IOException {
     
    		if ( !Files.isDirectory(targetDirectory) ) {
    			throw new IOException("Path is not directory");
    		}
     
    		HttpURLConnection conn = (HttpURLConnection)url.openConnection();
            int responseCode = conn.getResponseCode();
     
            // always check HTTP response code first
            if (responseCode == HttpURLConnection.HTTP_OK || responseCode == HttpURLConnection.HTTP_CREATED) {
                String contentDisposition = conn.getHeaderField("Content-Disposition");
                Path targetFile;
                if ( contentDisposition==null ) {
                	if ( defaultTarget==null ) {
                		throw new IOException("No Content-Dispostion");
                	}
                    targetFile = targetDirectory.resolve(defaultTarget);
                }
                else {
    	            int index = contentDisposition.indexOf("filename=");
    	            if (index > 0) {
    	                String fileName = contentDisposition.substring(index + 10,
    	                        contentDisposition.length() - 1);
    	                targetFile = targetDirectory.resolve(Paths.get(fileName));
    	            }
    	            else {
    	            	if ( defaultTarget==null ) {
    	            		throw new IOException("No file name");
    	            	}
    	                targetFile = targetDirectory.resolve(defaultTarget);
    	            }
                }
     
                if ( Files.exists(targetFile) ) {
                	String filename = targetFile.getFileName().toString();
                	int start;
                	StringBuilder newfilename;
                	int extensionPosition = filename.indexOf('.');
                	if ( extensionPosition<0 ) {
                		newfilename = new StringBuilder(filename).append(" (");
                		start = newfilename.length();
                		newfilename.append(')');
                	}
                	else {
                		newfilename = new StringBuilder(filename.substring(0,extensionPosition)).append(" (");
                		start = newfilename.length();
                		newfilename.append(')');
                		newfilename.append(filename.substring(extensionPosition));
                	}
     
     
                	for(int count=1, end=start; Files.exists(targetFile); count++ ) {
     
                		String str = String.valueOf(count);
                		newfilename.replace(start, end, str);
                		end = start+str.length();
    	            	targetFile = targetDirectory.resolve(Paths.get(newfilename.toString()));
     
    	            }
                }
     
        		try(InputStream inputStream = new BufferedInputStream(conn.getInputStream())) {
        			Files.copy(inputStream, targetFile);
        		}
     
            }
            else {
            	throw new IOException("Error HTTP status: "+responseCode + " / " + getHttpStatusErrorName(responseCode));
            }
     
    	}
     
    	private static String getHttpStatusErrorName(int responseCode) {
     
    		return Arrays.stream(HttpURLConnection.class.getFields())
    		      .filter(field-> field.getName().startsWith("HTTP_"))
                          .filter(field-> field.getType()==int.class)
    		      .filter(field-> {
    		    	  try {
    					return field.get(null).equals(responseCode) ;
    				} catch (Throwable e) {
    					return false;
    				} 
    		      })
    		      .map(field-> field.getName().substring("HTTP_".length()))
    		      .findFirst().orElse("UNKNOWN");
     
    	}
    Tout ceci ne fonctionne pas avec une connexion sécurisée, ou si le site fait des trucs spéciaux en JavaScript pour le téléchargement, ou encore si le contenu est compressé, etc. Si la connexion accepte un header Authorization ou autre, on peut gérer ce header (et l'affecter par HttpUrlConnection.setRequestProperty()). On peut utiliser JSoup ou HttpClient, ou autre (on trouve des API Java qui appelle curl par exemple).

    Enfin, tu peux utiliser un navigateur intégré JavaFX (WebView) et le piloter en Java, et donc avoir le contrôle complet.

    Si tu tiens à passer par un navigateur externe, et que le téléchargement est possible sans la fenêtre, il te faudra utiliser une bibliothèque capable de s'interfacer avec le système, trouver la fenêtre qui correspond au navigateur, pour la cacher (et la fermer au bon moment), ce qui risque d'être assez complexe dans l'ensemble.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  5. #5
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2018
    Messages
    150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2018
    Messages : 150
    Par défaut
    merci pour cette réponse Joel.
    ton premier code semble me correspondre ( du moins j'ai pu l'adapter a mon projet, au code que j'ai partagé)
    une petite question cependant.
    il enregistre le fichier chargé dans le chemin du projet.
    est-ce dû a l'option "StandardCopyOption.REPLACE_EXISTING"
    car en soit si je pouvais definir un autre chemin pour le mettre dans un autre dossier...

  6. #6
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par K2carca Voir le message
    une petite question cependant.
    il enregistre le fichier chargé dans le chemin du projet.
    est-ce dû a l'option "StandardCopyOption.REPLACE_EXISTING"
    Non, c'est dû à String target = "logo-dvp.png"; dans mon exemple. Comme il n'y a pas de dossier, c'est le dossier de travail qui est utilisé et le dossier de travail lorsqu'on exécute depuis un IDE, c'est le dossier de projet. Si tu veux indiquer un dossier, tu le fais directement dans la variable target ;

    Par exemple, sous Windows, pour télécharger dans le dossier Téléchargements de l'utilisateur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String target = System.getProperty("user.home")+"/Downloads/logo-dvp.png";
    StandardCopyOption.REPLACE_EXISTING c'est une option qui dit que si le fichier existe déjà, il est remplacé. Sans cette option, si le fichier existe déjà, il y aura une exception.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

Discussions similaires

  1. Ne pas afficher d'alert lors de l'utilisation de shutdown.exe C#
    Par Florian_mbf dans le forum Développement Windows
    Réponses: 2
    Dernier message: 02/04/2014, 09h38
  2. Ne pas afficher le menu lors d'un click droit
    Par NEC14 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 04/07/2013, 10h59
  3. Réponses: 10
    Dernier message: 16/10/2008, 16h27
  4. Console JAVA à ne pas afficher
    Par BakaOnigiri dans le forum Général Java
    Réponses: 2
    Dernier message: 08/01/2008, 15h31
  5. Réponses: 2
    Dernier message: 11/12/2007, 14h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo