Imagen de carga de JavaFX desde la ruta variable

josef:

Estoy tratando de hacer un software de dados simple que genere aleatoriamente un número entre 1 y 6 y muestre una imagen de los dados en ese estado respectivamente.

Tengo problemas para agarrar la ruta de la imagen cuando uso el Imageobjeto para generar una imagen. Si pongo una ruta directamente, funciona, pero intentar usar una variable me da errores.

Cuando hago clic en el botón 'Aleatorizar' en el software, se imprimen los siguientes errores:

Exception in thread "JavaFX Application Thread" 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 dicegui.DiceGUI.lambda$start$0(DiceGUI.java:83)
    at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86)
    at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
    at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
    at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
    at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
    at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:49)
    at javafx.event.Event.fireEvent(Event.java:198)
    at javafx.scene.Node.fireEvent(Node.java:8411)
    at javafx.scene.control.Button.fire(Button.java:185)
    at com.sun.javafx.scene.control.behavior.ButtonBehavior.mouseReleased(ButtonBehavior.java:182)
    at com.sun.javafx.scene.control.skin.BehaviorSkinBase$1.handle(BehaviorSkinBase.java:96)
    at com.sun.javafx.scene.control.skin.BehaviorSkinBase$1.handle(BehaviorSkinBase.java:89)
    at com.sun.javafx.event.CompositeEventHandler$NormalEventHandlerRecord.handleBubblingEvent(CompositeEventHandler.java:218)
    at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:80)
    at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
    at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
    at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
    at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
    at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54)
    at javafx.event.Event.fireEvent(Event.java:198)
    at javafx.scene.Scene$MouseHandler.process(Scene.java:3757)
    at javafx.scene.Scene$MouseHandler.access$1500(Scene.java:3485)
    at javafx.scene.Scene.impl_processMouseEvent(Scene.java:1762)
    at javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2494)
    at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:394)
    at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:295)
    at java.security.AccessController.doPrivileged(Native Method)
    at com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent$353(GlassViewEventHandler.java:432)
    at com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:389)
    at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:431)
    at com.sun.glass.ui.View.handleMouseEvent(View.java:555)
    at com.sun.glass.ui.View.notifyMouse(View.java:937)
    at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
    at com.sun.glass.ui.win.WinApplication.lambda$null$147(WinApplication.java:177)
    at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.IllegalArgumentException: Invalid URL or resource not found
    at javafx.scene.image.Image.validateUrl(Image.java:1110)
    ... 49 more

Este es el código que está generando el error:

        btnRand.setOnAction((ActionEvent e) ->
        {
            String imgPath = getImage();
            System.out.println("\"" + imgPath + "\"");
            Image img = new Image("\"" + imgPath + "\"");
            //Image img = new Image("img/2.png"); I WAS JUST USING THIS TO TEST
            grid.getChildren().add(new ImageView(img));
            randOutput.setTextFill(Color.GREEN);
        });

Este es mi código completo. Vale la pena señalar que estoy usando NetBeans.

package dicegui;


import java.util.Random;
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.geometry.HPos;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.GridPane;
import javafx.scene.paint.Color;
import javafx.stage.Stage;

/**
 *
 * @author josef
 */
public class DiceGUI extends Application
{
    public int rollDice()
    {
        int value;
        Random ran = new Random();

        value = ran.nextInt(6) + 1;

        return value;
    }

    public String getImage()
    {
        int value = rollDice() - 1;
        String imageLocation;

        String[] images = new String[6];
        images[0] = "img/1.png";
        images[1] = "img/2.png";
        images[2] = "img/3.png";
        images[3] = "img/4.png";
        images[4] = "img/5.png";
        images[5] = "img/6.png";

        imageLocation = images[value];

        return imageLocation;
    }

    @Override
    public void start(Stage primaryStage)
    {
        primaryStage.setTitle("DiceGUI");

        GridPane grid = new GridPane();
        grid.setAlignment(Pos.CENTER);
        grid.setHgap(10);
        grid.setVgap(10);
        grid.setPadding(new Insets(25, 25, 25, 25));


        Button btnRand = new Button("Randomise");
        GridPane.setHalignment(btnRand, HPos.CENTER);
        grid.add(btnRand, 0, 0);

        Label randOutput = new Label("Not yet randomised");
        randOutput.setTextFill(Color.web("#CD2626"));
        GridPane.setHalignment(randOutput, HPos.CENTER);
        grid.add(randOutput, 0, 1);

        btnRand.setOnAction((ActionEvent e) ->
        {
            String imgPath = getImage();
            System.out.println("\"" + imgPath + "\"");
            Image img = new Image("\"" + imgPath + "\"");
            //Image img = new Image("img/2.png");
            grid.getChildren().add(new ImageView(img));
            randOutput.setTextFill(Color.GREEN);
        });





        Scene scene = new Scene(grid, 300, 300);
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args)
    {
        launch(args);
    }

}

La estructura del archivo es la siguiente:

estructura de archivo

Samuel Philipp:

Está utilizando comillas dobles al principio y al final de su cadena, lo que produce una ruta de archivo no válida, por ejemplo "img/5.png". La ruta válida esimg/5.png

Solo usa imgPathpara cargar la imagen:

Image img = new Image(imgPath);

Alternativamente, puede usar el cargador de clases para obtener los recursos:

Image img = new Image(getClass().getResourceAsStream("/" + imgPath));

Este artículo se recopila de Internet, indique la fuente cuando se vuelva a imprimir.

En caso de infracción, por favor [email protected] Eliminar

Editado en
0

Déjame decir algunas palabras

0Comentarios
Iniciar sesiónRevisión de participación posterior

Artículos relacionados

Obtener la ruta de la imagen JavaFx

la imagen no se carga en javafx css desde la carpeta de recursos al hacer jar

"La ruta de carga no parece ser válida" Carga de la imagen de Codeigniter

imagen de carga rápida de Android desde la URL

Imagen de carga de C # Xamarin desde la URL

Flutter - Cargar ruta desde la imagen de la galería

La imagen de Django no se carga desde la plantilla, pero se carga desde el administrador

Carga de imagen de Summernote desde URL

El nombre de la ruta de carga de la imagen es "System.Web.HttpPostedFileWrapper"

La carga de la imagen de django en la ruta no se muestra

cómo cargar la imagen desde la ruta de la imagen local Ios Swift 4

¿Cómo cargar la imagen desde la ruta a la vista de imagen?

C # abre la ruta de la imagen desde listBox y muestra la imagen en PictureBox

Carga de imagen desde smartface io

No se pudo encontrar una parte de la ruta: ASP.net/C# Carga de imagen

carga de imagen TypeError: no se puede leer la propiedad 'ruta' de indefinido

Ruta de la imagen EasyAdmin

La imagen no se carga incluso después de tener la ruta adecuada en html

Imagen de carga de JavaScript (MVC) (matriz de bytes) desde la base de datos

Laravel muestra la ruta de la imagen desde la carpeta de almacenamiento / aplicación

Animación de marcador de posición mientras se carga la imagen desde la red

Dividir la ruta de la imagen en javascript desde la primera barra

Mac: obteniendo la ruta de la imagen actual del escritorio desde la terminal

No se puede mostrar la ruta de la imagen correctamente desde la matriz php

Carga masiva de archivos desde la ruta local a SharePoint Online ¿Permitir Ampersand y Pound?

Android obtiene imagen a mapa de bits desde la ruta de archivo

Android OOS mientras dibuja la interfaz de usuario y carga la imagen desde local

¿Cómo puedo cargar una imagen usando deslizar desde la ruta de la URL?

La imagen de carga de PHP no funciona

TOP Lista

CalienteEtiquetas

Archivo