JavaFX 在网格窗格中显示多个图像

Mat*_*son 5 java javafx image gridpane

在此处输入图片说明我正在尝试制作一个在网格窗格中显示 4 个图像的简单程序。我在那里得到一个没问题,但是一旦我尝试添加第二个,我就遇到了一些问题。这是我的代码:

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

我认为这可能是图像后的行和列的问题,但我尝试了一些方法但没有成功。任何帮助是极大的赞赏。谢谢

JKo*_*dis 1

代码没有任何问题。问题出在第二张 gif 图片上。例如,如果您下载它并从项目资源加载它,它将正确加载。现在为什么你不能从 url“访问”gif 是另一回事..我会检查它,如果我找到一些东西,我会编辑这个答案。

编辑 :

如果使用上面的代码加载图像,请进行一些调试:

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);
Run Code Online (Sandbox Code Playgroud)

您将看到第二个 gif 会给您一个错误 java.io.IOException ,服务器返回 HTTP 响应代码:403 for URL ...

所以我猜服务器不会通过 http 请求“授予”对 gif 图像的访问权限,这就是为什么你无法加载它。当涉及到 Https 请求时,我不是“专业人士”,所以我可能是错的。

403 Java 禁止,但浏览器不禁止?

通过上面的帖子,您可以稍微修改一下代码并加载它 find :

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);
Run Code Online (Sandbox Code Playgroud)

我追不上@flakes @tomorrow :P