0

Я как бы новичок в программировании, поэтому прошу прощения, если это вопрос новичков! Я несколько раз сталкивался с Java, но я полностью новичок в JavaFX. Я пытаюсь написать программу, которая откроет окно и отобразит 3 случайных изображения карты из колоды из 52 карт на GridPane, и я не могу понять, почему я продолжаю получать InvocationTargetException, RuntimeException и ArrayIndexOutOfBoundsException. Должен ли я включать блоки try и catch с этими исключениями? Или были бы другие исключения, которые я должен был включить? Или это может быть местоположение моих файлов изображений? Мое текущее местоположение всех файлов изображений 52 карт: C: \ Users \ Asus \ Documents \ NetBeansProjects \ AdvancedJavaClass \ SRC \ CardsJavaFX InvocationTargetxception и другие ошибки, пытаясь отобразить изображение

Ниже мой код:

package Cards; 

import javafx.application.Application; 
import javafx.scene.Scene; 
import javafx.scene.layout.GridPane; 
import javafx.stage.Stage; 
import javafx.scene.image.Image; 
import javafx.scene.image.ImageView; 
import java.util.Random; 

public class ThreeCards extends Application { 

    @Override 
    public void start(Stage primaryStage) { 
      Image[] Cards = new Image[51]; 
      ImageView firstCard = new ImageView(); 
      ImageView secondCard = new ImageView(); 
      ImageView thirdCard = new ImageView(); 
    Random cardPicker = new Random(); 
    int card1 = 0; 
    int card2 = 0; 
    int card3 = 0; 

for(int i=1; i<53; i++) { 
    Cards[i-1] = new Image("file: "+i+".png"); 
} 
    if (card1 == card2 || card2 == card3 || card3 == card1) { 
    card1 = cardPicker.nextInt(51)+0; 
    card2 = cardPicker.nextInt(51)+0; 
    card3 = cardPicker.nextInt(51)+0; 
} 
    firstCard.setImage(Cards[card1]); 
    secondCard.setImage(Cards[card2]); 
    thirdCard.setImage(Cards[card3]); 
     GridPane root = new GridPane(); 
     root.getChildren().add(firstCard); 
     root.getChildren().add(secondCard); 
     root.getChildren().add(thirdCard); 
     Scene scene = new Scene(root, 300, 250); 

     primaryStage.setTitle("Three Cards"); 
     primaryStage.setScene(scene); 
     primaryStage.show(); 
    } 
     public static void main(String[] args) { 
     launch(args); 
    }   
} 

И следующее, что происходит/что я получаю при запуске:

Executing C:\Users\Asus\Documents\NetBeansProjects\AdvancedJavaClass\dist\run2133970792\AdvancedJavaClass.jar using platform C:\Program Files\Java\jdk1.8.0_71\jre/bin/java 
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:497) 
    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:497) 
    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.ArrayIndexOutOfBoundsException: 51 
    at Cards.ThreeCards.start(ThreeCards.java:34) 
    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 
Exception running application Cards.ThreeCards 
Java Result: 1 

IDE, в котором я в настоящее время используется Netbeans. Пожалуйста, помогите! Я не могу понять, почему я получаю эти ошибки! Спасибо!!

ответ

0

Изменить это:

for(int i=1; i<53; i++) { 
    Cards[i-1] = new Image("file: "+i+".png"); 
} 

To:

for(int i=0; i<51; i++) { 
    Cards[i] = new Image("file: "+ String.valueOf(i+1) +".png"); 
} 

Вы чрезмерно индексирует массив (карты [51] не существует).

+0

Привет, DVarga, и спасибо за ваш ответ! Я сделал именно то, что вы мне сказали, и изменил указанный код, но я получаю то же самое ArrayIndexOutOfBounds Exception независимо! и он по-прежнему относится к одной и той же строке (34), у вас были бы какие-то другие идеи? – needsomehelpls

+0

Строка (34): «Карты [i] = новое изображение (« файл: »+ String.valueOf (i + 1) +« .png »);"? – DVarga

+0

Да, это строка (34) – needsomehelpls

 Смежные вопросы

  • Нет связанных вопросов^_^