[英]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.