JavaFX affichage de plusieurs images dans le volet grille


entrez la description de l'image iciJ'essaie de créer un programme simple affichant 4 images dans un volet de grille. J'en ai un là-dedans pas de problème mais une fois que j'essaie d'en ajouter une seconde, je rencontre quelques problèmes. Voici mon code:

package sample;

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.layout.GridPane;
import javafx.stage.Stage;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;

public class Main extends Application {

    @Override
    public void start(Stage primaryStage) throws Exception{

        GridPane gridPane = new GridPane();

        gridPane.add(new ImageView(new Image ("http://gifimage.net/wp-content/uploads/2017/06/american-flag-gif-13.gif")), 1,1);
        gridPane.add(new ImageView(new Image ("http://bestanimations.com/Flags/Asia/china/chinese-flag-waving-gif-animation-10.gif")), 2,2);

        Scene scene = new Scene(gridPane, 1000, 500);
        primaryStage.setTitle("Flags");
        primaryStage.setScene(scene);
        primaryStage.show();
    }


    public static void main(String[] args) {
        Application.launch(args);
    }
}

Je pense que cela pourrait être un problème avec la ligne et la colonne après l'image mais j'ai essayé quelques choses et je n'ai pas réussi. Toute aide est grandement appréciée. Merci

Author: Matthew Hanson, 2017-09-22

2 answers

flakes est un peu juste mais ce n'est pas l'image elle-même, c'est sa disponibilité. Si j'ouvre l'URL du drapeau chinois dans le navigateur, tout va bien, mais essayez le code modifié:

package sample;

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.TextField;
import javafx.stage.Stage;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.VBox;

public class Main extends Application {

    @Override
    public void start(Stage primaryStage) throws Exception{
        Image imgUsa = new Image ("http://gifimage.net/wp-content/uploads/2017/06/american-flag-gif-13.gif");
        Image imgChina = new Image ("http://bestanimations.com/Flags/Asia/china/chinese-flag-waving-gif-animation-10.gif");

        ImageView ivUsa = new ImageView(imgUsa);
        ImageView ivChina = new ImageView(imgChina);


        TextField errorText = new TextField();
        if (imgChina.isError()) {
            errorText.setText(imgChina.getException().getMessage());
        }

        VBox root = new VBox(ivUsa, ivChina, errorText);

        Scene scene = new Scene(root, 1000, 500);
        primaryStage.setTitle("Flags");
        primaryStage.setScene(scene);
        primaryStage.show();
    }


    public static void main(String[] args) {
        Application.launch(args);
    }
}

...ce que je reçois dans le champ de texte est:

Le serveur a renvoyé le code de réponse HTTP: 403 pour l'URL: http://bestanimations.com/Flags/Asia/china/chinese-flag-waving-gif-animation-10.gif

HTTP 403 - accès interdit

Et cela semble être le coupable.

 2
Author: tomorrow, 2017-09-24 21:53:28

Il n'y a rien de mal avec le code. Le problème réside sur la deuxième image gif. Si par exemple vous le téléchargez et le chargez à partir des ressources du projet, il se chargera correctement. Maintenant, pourquoi vous ne pouvez pas "accéder" au GIF à partir de l'URL est une autre chose.. Je vais vérifier cela et si je trouve quelque chose je vais modifier cette réponse.

Modifier:

Faire du débogage si vous utilisez le code ci-dessus pour charger les images:

gridPane.add( new ImageView(new Image(new URL( "http://gifimage.net/wp-content/uploads/2017/06/american-flag-gif-13.gif").openStream())), 0,
                0);
gridPane.add(new ImageView(new Image(new URL("http://bestanimations.com/Flags/Asia/china/chinese-flag-waving-gif-animation-10.gif").openStream())),0, 1);

, Vous verrez que le deuxième gif vous donnera une erreur java.io.IOException avec le code de réponse HTTP renvoyé par le serveur: 403 pour l'URL ...

Donc je suppose que le serveur ne "donne" pas accès à l'image gif via des requêtes http, c'est pourquoi vous ne pouvez pas la charger. Je ne suis pas un "professionnel" en ce qui concerne la demande Https, donc je peux me tromper.

403 Interdit avec Java mais pas le navigateur Web?

Avec le post ci-dessus, vous pouvez modifier un peu votre code et le charger trouver:

URL url = new URL("http://bestanimations.com/Flags/Asia/china/chinese-flag-waving-gif-animation-10.gif");
URLConnection conn = url.openConnection();
conn.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11");

conn.connect();

GridPane gridPane = new GridPane();

gridPane.add(new ImageView(new Image(new URL("http://gifimage.net/wp-content/uploads/2017/06/american-flag-gif-13.gif").openStream())), 0,0);
gridPane.add(new ImageView(new Image(conn.getInputStream())), 0, 1);

Je ne peux pas rattraper @flakes @ tomorrow: P

 0
Author: JKostikiadis, 2017-09-24 22:06:33