簡體   English   中英

以下代碼段有什么區別?

[英]what is the difference between the following code segments?

這些代碼段之一有效,另一個無效,但我不知道為什么。 我試過調試那個不起作用的。 代碼的實質是一樣的,我復制粘貼了它。 有效的程序取自一個稍大的程序,該程序最初顯示兩個階段。 教授希望我們擴展原始程序的一部分,所以我認為最好制作一個新項目,使其更易於閱讀和上傳。 問題是新的不起作用。

        This One Works

   ***int num1 = (int) (Math.random()*61);
   int num2 = (int) (Math.random()*61);
   int num3 = (int) (Math.random()*61);

   Stage Tiles = new Stage();
   Tiles.setTitle("Tiles");
   FlowPane tilePane = new FlowPane();
   System.out.println(num1 +" " + num2 + " " + num3);

   ImageView image1 = new ImageView(String.valueOf(num1)+".png");
   ImageView image2 = new ImageView(String.valueOf(num2)+".png");
   ImageView image3 = new ImageView(String.valueOf(num3)+".png");

   tilePane.getChildren().addAll(image1,image2,image3);
   Scene secondScene = new Scene(tilePane);
   Tiles.setScene(secondScene);
   Tiles.show();

}***

           This One Does Not Work

public class Case_lab6a extends Application

{ @覆蓋

public void start(Stage main)
{
   int num1 = (int) (Math.random()*61);
   int num2 = (int) (Math.random()*61);
   int num3 = (int) (Math.random()*61);


   main.setTitle("Tiles v2");
   FlowPane tilePane = new FlowPane();
   System.out.println(num1 +" " + num2 + " " + num3);

   ImageView image1 = new ImageView(String.valueOf(num1)+".png");
   ImageView image2 = new ImageView(String.valueOf(num2)+".png");
   ImageView image3 = new ImageView(String.valueOf(num3)+".png");



   tilePane.getChildren().addAll(image1,image2,image3);
   Scene secondScene = new Scene(tilePane);
   main.setScene(secondScene);
   main.show();
}

基於我得到的錯誤 該問題與編譯器無法識別圖像有關。 我知道我構建它的方式很奇怪,可能有更好的方法來做到這一點,但我有 61 張圖像都存儲在 src 文件中。

編輯:非功能性部分的進口:

import javafx.application.Application;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.image.ImageView;
import javafx.scene.layout.FlowPane;
import javafx.scene.layout.GridPane;
import javafx.stage.Stage;

工作段的進口:

import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.image.ImageView;
import static javafx.scene.layout.BackgroundPosition.CENTER;
import javafx.scene.layout.FlowPane;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.HBox;
import javafx.scene.paint.Color;
import javafx.scene.shape.Rectangle;
import javafx.stage.Stage;

非功能程序的輸出:

23 35 22
Exception in Application start method
java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:389)
    at com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:328)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:767)
Caused by: java.lang.RuntimeException: Exception in Application start method
    at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:917)
    at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$155(LauncherImpl.java:182)
    at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.IllegalArgumentException: Invalid URL: Invalid URL or resource not found
    at javafx.scene.image.Image.validateUrl(Image.java:1118)
    at javafx.scene.image.Image.<init>(Image.java:620)
    at javafx.scene.image.ImageView.<init>(ImageView.java:166)
    at lab6a.Case_lab6a.start(Case_lab6a.java:35)
    at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$162(LauncherImpl.java:863)
    at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$175(PlatformImpl.java:326)
    at com.sun.javafx.application.PlatformImpl.lambda$null$173(PlatformImpl.java:295)
    at java.security.AccessController.doPrivileged(Native Method)
    at com.sun.javafx.application.PlatformImpl.lambda$runLater$174(PlatformImpl.java:294)
    at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
    at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
    at com.sun.glass.ui.win.WinApplication.lambda$null$148(WinApplication.java:191)
    ... 1 more
Caused by: java.lang.IllegalArgumentException: Invalid URL or resource not found
    at javafx.scene.image.Image.validateUrl(Image.java:1110)
    ... 12 more
Exception running application lab6a.Case_lab6a
C:\Users\Kindness\AppData\Local\NetBeans\Cache\8.2\executor-snippets\run.xml:53: Java returned: 1
BUILD FAILED (total time: 1 second)

您發布的兩個代碼示例之間沒有區別,只是其中一個直接實例化了Stage

Stage Tiles = new Stage();

而另一個(您說的那個不起作用)希望您在調用start()方法時傳入Stage對象。

[旁白: Tiles變量應該是遵循 Java 命名約定的tiles 類名以大寫開頭,變量應為駝峰式。]

你說錯誤與圖像有關。 包含確切的錯誤消息(以及完整的堆棧跟蹤,如果可能)對您很有幫助。

您應該注意的一件事是,當您使用Math.random()它可能會返回0 您的圖像編號是從 0 到 60 嗎? 如果沒有,它可能會時不時地(隨機地)找不到圖像文件。

順便說一句,要生成隨機整數,您最好使用:

Random rand = new Random();
int num1 = rand.nextInt(61);
int num2 = rand.nextInt(61);
int num3 = rand.nextInt(61);

此外,您可以將String.valueOf(num1)+".png"簡化為num1 + ".png" 當附加到字符串時,整數會自動轉換為字符串。 您已經在System.out.println(num1 + " " + num2 + " " + num3)行中完成了該操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM