JavaFX场景总是空的;展示空舞台

JavaFX场景总是空的;展示空舞台,java,javafx,Java,Javafx,我正在进行一个JavaFX项目,以显示8皇后问题的解决方案。我遇到了一个奇怪的问题,我的场景总是呈现为空,我似乎无法解决这个问题 我尝试过在项目中渲染其他简单的东西&它们正确地显示,这向我表明,我将标签添加到GridPane的方式有问题。但是我直接从教科书上复制了这个解决方案,所以它应该是有效的,我无法理解为什么什么都没有显示出来。标题已设置且可见,但gridpane应位于的位置仅为空 package sample; import com.sun.glass.ui.Size; import j

我正在进行一个JavaFX项目,以显示8皇后问题的解决方案。我遇到了一个奇怪的问题,我的场景总是呈现为空,我似乎无法解决这个问题

我尝试过在项目中渲染其他简单的东西&它们正确地显示,这向我表明,我将标签添加到GridPane的方式有问题。但是我直接从教科书上复制了这个解决方案,所以它应该是有效的,我无法理解为什么什么都没有显示出来。标题已设置且可见,但gridpane应位于的位置仅为空

package sample;

import com.sun.glass.ui.Size;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.geometry.Pos;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.layout.GridPane;
import javafx.scene.text.Text;
import javafx.stage.Stage;



public class Main extends Application {
    public static final int SIZE = 8;
    private int [] queens = { -1,-1,-1,-1,-1,-1,-1,-1};


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

        search();// look for a solution

        GridPane chessBoard = new GridPane();
        chessBoard.setAlignment(Pos.CENTER);
        Label[][] labels = new Label[SIZE][SIZE];

        for(int i = 0; i < SIZE; i++)
        {
            for(int j = 0; j < SIZE; j++)
            {
                chessBoard.add(labels[i][j] = new Label(), j, i);
                labels[i][j].setStyle("−fx−border−color: black");
                labels[i][j].setPrefSize(55,55);
            }
        }
        Image img = new Image("queen.png");

        for(int i = 0; i < SIZE; i++)
        {
            labels[i][queens[i]].setGraphic(new ImageView(img));
        }

        Scene scenes = new Scene(chessBoard, 55 * SIZE, 55 * SIZE);
        primaryStage.setTitle("Eight Queens");
        primaryStage.setScene(scenes);
        primaryStage.show();
    }
    private boolean search()
    {
        int k = 0;
        while( k >= 0 && k < SIZE)
        {
            int j = findPosition(k);
            if(j < 0)
            {
                queens[k] = -1;
                k--;
            }else
            {
                queens[k]=j;
                k++;
            }
        }
        if(k == -1)
            return false;
        else
            return true;
    }

    public int findPosition(int k)
    {
        int start = queens[k]+1;

        for(int j = start; j < SIZE; j++)
        {
            if(isValid(k,j))
                return  j;
        }
        return -1;
    }
    public boolean isValid(int row, int col)
    {
        for (int i = 1; i <= row; i++)
        {
            if( queens[row - i] == col ||
                queens[row - i] == col - i ||
                queens[row - i] ==  col + i
            )
            {
                return false;
            }
        }
        return true;
    }


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

包装样品;
导入com.sun.glass.ui.Size;
导入javafx.scene.image.image;
导入javafx.scene.image.ImageView;
导入javafx.application.application;
导入javafx.fxml.fxmloader;
导入javafx.geometry.Pos;
导入javafx.scene.Parent;
导入javafx.scene.scene;
导入javafx.scene.control.Label;
导入javafx.scene.layout.GridPane;
导入javafx.scene.text.text;
导入javafx.stage.stage;
公共类主扩展应用程序{
公共静态最终整数大小=8;
私有int[]queens={-1,-1,-1,-1,-1,-1,-1};
@凌驾
public void start(Stage primaryStage)引发异常{
search();//查找解决方案
GridPane棋盘=新的GridPane();
棋盘设置对齐(位置中心);
标签[][]标签=新标签[尺寸][尺寸];
对于(int i=0;i=0&&k对于(inti=1;i我用不同大小的图像测试了您的代码

当您增加到256px时,64px的宽度和高度能够正确显示,尽管无法显示图像

直接将
ImageView
添加到
GridPane
可以解决您的问题,您可能需要找到一种绘制边框的方法

for(int i=0;i
我用不同大小的图像测试了您的代码

当您增加到256px时,64px的宽度和高度能够正确显示,尽管无法显示图像

直接将
ImageView
添加到
GridPane
可以解决您的问题,您可能需要找到一种绘制边框的方法

for(int i=0;i
我猜你在GUI线程上做的事情太多了。你是否尝试过去掉所有这些循环,看看是否可以显示基本的根节点?是的,我尝试过用一些颜色渲染一个文本元素,效果很好。我可以看到,当我调试Queen数组时,它的值是正确的。我猜你做的事情太多了n GUI线程。您是否尝试过删除所有这些循环以查看是否可以显示基本根节点?是的,我尝试过只渲染带有某种颜色的文本元素,效果很好。问题是,当我调试Queen数组时,我可以看到正确的值