Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Timer 如何让舞台在计时器后显示图片_Timer_Javafx - Fatal编程技术网

Timer 如何让舞台在计时器后显示图片

Timer 如何让舞台在计时器后显示图片,timer,javafx,Timer,Javafx,单击“开始”按钮后,我的程序将不会显示第二个场景和线程,直到线程完成。线程将无法正确运行(草没有增加) 公共类test111扩展了应用程序{ 私有静态int_i=130; 私有静态int_j=200; 私有静态int[]map=newint[grass_i][grass_j]//草地資料格拉斯数据 私有静态整型totalgrass;//草总数 私有静态整型totalgrassrest;//GrassRest编号 私人静态整数月=1//月 私人定时器//時間 //桂 场景菜单; //开始後的視窗

单击“开始”按钮后,我的程序将不会显示第二个场景和线程,直到线程完成。线程将无法正确运行(草没有增加)

公共类test111扩展了应用程序{
私有静态int_i=130;
私有静态int_j=200;
私有静态int[]map=newint[grass_i][grass_j]//草地資料格拉斯数据
私有静态整型totalgrass;//草总数
私有静态整型totalgrassrest;//GrassRest编号
私人静态整数月=1//月
私人定时器//時間
//桂
场景菜单;
//开始後的視窗
BorderPane bpAll=新的BorderPane();
窗格播放视图=新建窗格();
场景mainsc=新场景(bpAll);
//草
Image littlegrassImg=新图像(getClass().getResourceAsStream(“map_littlegrass.png”);
Image midiumgrassImg=新图像(getClass().getResourceAsStream(“map_midiumgrass.png”);
Image muchgrassImg=新图像(getClass().getResourceAsStream(“map_muchgrass.png”);
矩形2D[][]视口矩形=新矩形2D[130][200];
私有静态ImageView[][]映射视图=新ImageView[130][200];
//時間
@凌驾
public void start(Stage primaryStage)抛出中断异常{
//菜单
窗格菜单=新建窗格();
menusc=新场景(菜单);
menu.setPrefSize(1000800);
Image MenuImg=新图像(getClass().getResourceAsStream(“Menu_title.jpg”);
Image StartImg=新图像(getClass().getResourceAsStream(“Start.jpg”);
menu.getChildren().add(newimageview(MenuImg));
按钮StartBt=新按钮();
开始设置预大小(450150);
StartBt.setGraphic(新图像视图(StartImg));
StartBt.setMaxSize(450150);
开始设置布局X(300);
开始设置布局(600);
menu.getChildren().addAll(新图像视图(MenuImg),StartBt);
初生阶段:最低高度(800)//固定視窗大小确定舞台的大小
初级阶段设置最小宽度(1000)//固定視窗大小确定舞台的大小
初级阶段设置最大高度(800)//固定視窗大小确定舞台的大小
初级阶段设置最大宽度(1000)//固定視窗大小确定舞台的大小
初生阶段:西新世(menusc);
初级阶段。片名(“海普诺斯的院子”);
//开始
开始设置操作(e->{
边界窗格bp2=bp2();
menusc=新场景(bp2);
初生阶段:西新世(menusc);
});
primaryStage.show();
}
公共边界窗格bp2(){
播放视图=播放视图();
bpAll=新边框窗格();
bpAll.setPrefSize(1000800);
playView.setPrefSize(1000650)//庭院
bpAll.setTop(播放视图);
Random ran=新的Random();
totalgrass=(ran.nextInt(50)*1000)+48000;
totalgrassrest=totalgrass;
grasscreate();
//設定初始草地建造最初的草地
grassGraphicsLoading();//加载草地图片
返回bpAll;
}
公共窗格播放视图(){
playView=新窗格();

而(在我点击开始按钮后的一个月,我的程序将不会显示第二个场景和线程,直到线程完成。线程将无法正确运行(草没有增加)。请解释您试图实现的目标和结果。不要为此任务使用计时器和线程,请使用.Post。我只想模拟一个正在生长草的区域。首先,您将看到一个菜单和一个“开始”按钮,单击“开始”,然后将进入一个新场景(menusc=新场景(bp2)),并将构建初始草数据(grasscreate())。方法“Pane playView()”是我想做的主要功能。在这个方法中,我想在程序中模拟一个月0.2s。方法“month()”是增加草的数量(一个月后),方法“grassGraphicsLoading()”是将grass数据转换为ImageView..RE jewelsea,对不起,我已经简化了我的代码。我不知道哪行是错的,所以我不能发布最小的示例。
public class test111 extends Application {
    private static int grass_i=130;
    private static int grass_j=200;
    private static int[][] map = new int[grass_i][grass_j];//草地資料grassdata
    private static int totalgrass; //grass total number
    private static int totalgrassrest; //grass rest number
    private static int months=1; //月
    private Timer timer;//時間
    //GUI
    Scene menusc ;
    //START後的視窗
    BorderPane bpAll = new BorderPane();  
    Pane playView = new Pane();
    Scene mainsc = new Scene(bpAll);
    //草
    Image littlegrassImg = new Image(getClass().getResourceAsStream("map_littlegrass.png"));
    Image midiumgrassImg = new Image(getClass().getResourceAsStream("map_midiumgrass.png"));
    Image muchgrassImg = new Image(getClass().getResourceAsStream("map_muchgrass.png"));
    Rectangle2D[][] viewportRect = new Rectangle2D[130][200];
    private static ImageView[][] mapView = new ImageView[130][200];
    //時間
    @Override
    public void start(Stage primaryStage) throws InterruptedException {     
        //MENU
        Pane menu = new Pane();
        menusc = new Scene(menu);
        menu.setPrefSize(1000, 800);
        Image MenuImg = new Image(getClass().getResourceAsStream("Menu_title.jpg"));        
        Image StartImg = new Image(getClass().getResourceAsStream("Start.jpg"));    
        menu.getChildren().add(new ImageView(MenuImg)); 
        Button StartBt = new Button();
        StartBt.setPrefSize(450, 150);
        StartBt.setGraphic(new ImageView(StartImg));
        StartBt.setMaxSize(450, 150);
        StartBt.setLayoutX(300);
        StartBt.setLayoutY(600);
        menu.getChildren().addAll(new ImageView(MenuImg),StartBt);
        primaryStage.setMinHeight(800);//固定視窗大小fix the size of Stage
        primaryStage.setMinWidth(1000);//固定視窗大小fix the size of Stage
        primaryStage.setMaxHeight(800);//固定視窗大小fix the size of Stage
        primaryStage.setMaxWidth(1000);//固定視窗大小fix the size of Stage
        primaryStage.setScene(menusc);
        primaryStage.setTitle("Hypnos' yard");

        //START
        StartBt.setOnAction(e->{
            BorderPane bp2 = bp2(); 
            menusc = new Scene(bp2);
            primaryStage.setScene(menusc);
        });
    primaryStage.show();
}
public BorderPane bp2(){
    playView = playView();
    bpAll = new BorderPane();
    bpAll.setPrefSize(1000, 800);
    playView.setPrefSize(1000, 650);  //庭院
    bpAll.setTop(playView);  
    Random ran = new Random();
    totalgrass = (ran.nextInt(50)*1000)+48000;
    totalgrassrest = totalgrass;
    grasscreate();
    //設定初始草地construct the initial grass
    grassGraphicsLoading(); //loading grass pictures

    return bpAll;
}

public Pane playView(){
    playView = new Pane();

    while(months<12){

        timer = new Timer();
        TimerTask task = new TimerTask(){
            public void run(){
            month();
            }
        };//after program executing 0.2s, a month past
        timer.schedule(task, 200);
        try {
            Thread.sleep(200);
        }
        catch(InterruptedException e6) {
        }                   
        timer.cancel();                 
    }       
    return playView;
}
//月month
protected void month(){
    if(months<13){
        grassgrow(totalgrass*2);//grass growth
        Platform.runLater(new Runnable(){
            @Override
                public void run(){
                grassGraphicsLoading();             
            }
        });
    months++;
    }
}
//把草地資料帶入圖形loading grass pictures
private void grassGraphicsLoading(){

    for (int i = 0; i < grass_i; i++) { // 設定imageView的圖形和位置
        for (int j = 0; j < grass_j; j++) {
            viewportRect[i][j] = new Rectangle2D(j * 5, i * 5, 5, 5);
            if (170 <= j && j <= grass_j - 1) {
                mapView[i][j] = new ImageView(muchgrassImg);
            } else if (140 <= j && j < 170) {
                mapView[i][j] = new ImageView(muchgrassImg);
            } else {
                if (map[i][j] == 0) {
                    mapView[i][j] = new ImageView(littlegrassImg);
                } else if (map[i][j] == 1 || map[i][j] == 2) {
                    mapView[i][j] = new ImageView(midiumgrassImg);
                } else {
                    mapView[i][j] = new ImageView(muchgrassImg);
                }
            }
            playView.getChildren().add(mapView[i][j]);
            mapView[i][j].setViewport(viewportRect[i][j]);
            mapView[i][j].setX(j * 5);
            mapView[i][j].setY(i * 5);

        }
    }
}
public static void main(String[] args) {
    launch(args);   
}
// 每經過30天(一個月)草地+1grassgrowth
protected void grassgrow(int sum) {

    for (int i = 0; i < grass_i; i++) {
        for (int j = grass_j - 1; j >= 0; j--) {
            if (map[i][j] < 4 && totalgrass <sum) {
                map[i][j] += 1;
                totalgrass++;
            }
            if (totalgrass == 104000||totalgrass ==sum) {
                break;
            }
        }
    }
}
//建構草地construct grass
protected void grasscreate() {
    for (int j = grass_j - 1; j >= 0; j--) {
        for (int i = grass_i - 1; i >= 0; i--) {
            if (170 <= j && j <= grass_j - 1) {
                map[i][j] = 0;
            } else if (140 <= j && j < 170) {
                map[i][j] = 4;
                totalgrassrest -= 4;
            } else if (totalgrassrest <= 0) {
                map[i][j] = 0;
            } else if (4 * (j + 1) * grass_i <= totalgrassrest) {
                map[i][j] = 4;
                totalgrassrest -= 4;
            } else if (totalgrassrest < 4) {
                map[i][j] = totalgrassrest;
                totalgrassrest = 0;
            } else {
                map[i][j] = rancreate();
                totalgrassrest -= map[i][j];
            }
        }
    }
    totalgrass -= totalgrassrest;
    totalgrassrest = 0;
}

// 一格(5X5)內草地數量隨機1-4平米z there is 1-4 grass inside a rectangle
private int rancreate() {
    Random ran = new Random();
    int grass = ran.nextInt(5);
    return grass;
}