[我正在使用Java为我的课程在JGrasp中制作魔术8球。如何使我的代码运行?我不知道我的错误是什么或如何解决?

问题描述 投票:0回答:1

这是我的代码

import java.util.*;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.layout.Pane;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
import javafx.scene.shape.Circle;
import javafx.scene.shape.Rectangle;
import javafx.scene.shape.Polygon;
import javafx.scene.paint.Color;
import javafx.scene.text.Text;
import javafx.scene.image.ImageView;
import javafx.scene.image.Image;
import javafx.scene.text.Font;
import javafx.scene.text.FontWeight;
import javafx.geometry.Pos;
import javafx.scene.layout.VBox;
import javafx.scene.control.Button;
import javafx.scene.layout.FlowPane;
import javafx.geometry.Pos;
import javafx.scene.control.TextField;
import java.security.SecureRandom;
import javax.swing.ImageIcon;
import javax.swing.JOptionPane;

   public class FinalProject8ball extends Application
   {
      @Override
      public void start(Stage primaryStage)
      {
         Circle circle = new Circle(80);
         circle.setStroke(Color.BLACK);
         circle.setFill(Color.BLACK);

         StackPane sPane = new StackPane();
         sPane.getChildren().add(circle);

         Scene scene = new Scene(sPane, 300, 400);
         primaryStage.setScene(scene);
         primaryStage.show();       
         Polygon triangle = new Polygon();
         triangle.getPoints().setAll(
            50.0, 50.0,
            60.0, 60.0,
            20.0, 40.0
            );

         StackPane sPane1 = new StackPane();
         sPane1.getChildren().add(triangle);

         Scene scene2 = new Scene(sPane, 300, 400);
         primaryStage.setScene(scene2);
         primaryStage.show();

         String answers[] = {"It is certain", "It is decidedly so", "Without a doubt",
            "Yes - definitely", "You may rely on it", "As I see it, yes",
            "Most likely", "Outlook good", "Signs point to yes",
            "Yes", "Reply hazy, try again", "Ask again later",
            "Better not tell you now", "Cannot predict now", "Concentrate and ask again",
            "Don't count on it", "My reply is no", "My sources say no",
            "Outlook not so good", "Very doubtful"};

        //constructs a random number  
         SecureRandom randomNumber = new SecureRandom();
         ImageIcon image = new ImageIcon("magic8ball.jpg");
         int counter = 0;

        //the loop keeps asking the person to plat till no button is clicked
         while(!(counter == 1)) {
            //prompts the user to ask a yes or no question 
            String answer = JOptionPane.showInputDialog(null, 
                    "PLease enter a yes or no question:", 
                    "WELCOME: What will your answer be?!", JOptionPane.INFORMATION_MESSAGE);

            //displays the answer
            if(answer != null)
               JOptionPane.showMessageDialog(null, answer+ "\n" + answers[randomNumber.nextInt(answers.length)], 
                  "The Magic-8 Ball has responded.", JOptionPane.PLAIN_MESSAGE, image);

            //gives the user the option to click yes or no to continue or end the program
            counter = JOptionPane.showConfirmDialog(null, "", "Would you like to ask again?", 
                    JOptionPane.YES_NO_OPTION, 0, image);                           
         }

        //displays my name after user enters no to give credit
         JOptionPane.showMessageDialog(null, "Created by Isabelle", "Have a MAGICAL day! Your answers have been answerd.", 
                JOptionPane.PLAIN_MESSAGE, image);
      }
      public static void main(String[] args)
      {
         Application.launch(args);
         }
      }

这是编译后尝试运行代码后收到的错误消息。

---- jGRASP exec:java --module-path C:\ Users \ Isabelle rose \ Downloads \ openjfx-11.0.2_windows-x64_bin-sdk(1)\ javafx-sdk-11.0.2 \ lib --add -modules = javafx.controls FinalProject8ball应用程序启动方法异常java.lang.reflect.InvocationTargetException在java.base / jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(本机方法)在java.base / jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)在java.base / jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)在java.base / java.lang.reflect.Method.invoke(Method.java:566)在javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:464)在javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:363)在java.base / jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(本机方法)在java.base / jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)在java.base / jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)在java.base / java.lang.reflect.Method.invoke(Method.java:566)在java.base / sun.launcher.LauncherHelper $ FXHelper.main(LauncherHelper.java:1051)由以下原因引起:java.lang.RuntimeException:应用程序启动方法中的异常在javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:900)在javafx.graphics/com.sun.javafx.application.LauncherImpl.lambda$launchApplication$2(LauncherImpl.java:195)在java.base / java.lang.Thread.run(Thread.java:834)原因:java.lang.IllegalArgumentException:StackPane @ 4c7dc253 [styleClass = root]已设置为另一个场景的根在javafx.graphics/javafx.scene.Scene$8.invalidated(Scene.java:1216)在javafx.base / javafx.beans.property.ObjectPropertyBase.markInvalid(ObjectPropertyBase.java:112)在javafx.base / javafx.beans.property.ObjectPropertyBase.set(ObjectPropertyBase.java:147)在javafx.graphics/javafx.scene.Scene.setRoot(Scene.java:1178)在javafx.graphics/javafx.scene.Scene。(Scene.java:356)在javafx.graphics/javafx.scene.Scene。(Scene.java:236)在FinalProject8ball.start(FinalProject8ball.java:58)在javafx.graphics/com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$9(LauncherImpl.java:846)在javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runAndWait$12(PlatformImpl.java:455)在javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$10(PlatformImpl.java:428)在java.base / java.security.AccessController.doPrivileged(本机方法)在javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$11(PlatformImpl.java:427)在javafx.graphics/com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:96)在javafx.graphics/com.sun.glass.ui.win.WinApplication._runLoop(本机方法)在javafx.graphics/com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(WinApplication.java:174)...还有1个正在运行应用程序FinalProject8ball的异常

java jgrasp
1个回答
0
投票

堆栈中的实际错误如下:

Caused by: java.lang.IllegalArgumentException: StackPane@70ea261c[styleClass=root]is already set as root of another scene

查看此行:

Scene scene2 = new Scene(sPane, 300, 400);

尝试以下方法:

// You already used 'sPane' as the root of a previous scene called 'scene'
Scene scene2 = new Scene(sPane1, 300, 400);

注意:

尽管您的程序将通过此单个更改运行,但我认为您会发现它的外观与应有的方式不符。您正在使用两个堆栈窗格,一个堆栈上有一个圆形,另一个上有一个三角形。可以将堆栈窗格视为节点的堆栈,每个节点一个接一个地分层放置,就像您在物理上堆叠它们一样。可以肯定的是,您只需要一个叠加了圆和三角形的叠层即可代表一个8球。

© www.soinside.com 2019 - 2024. All rights reserved.