Jump to content

(JavaFX) Image object path being weird.

Kiyullo
Go to solution Solved by Biohazard777,
On 11/17/2023 at 1:32 AM, Kiyullo said:
Image icon = new Image("purp.png");

Isn't that supposed to be URI?
Like so:

Image icon = new Image("file:purp.png");

Try that.

I'm trying out JavaFX and when I instantiate an Image object it throws an IllegalArgumentException exception: Invalid URL or resource not found
    at javafx.graphics/javafx.scene.image.Image.validateUrl(Image.java:1120)

 

I assume the image path isn't working, but I'm doing exactly what's shown in a video where it works properly. If the image file (named purp.png) is in my src directory, I pass "purp.png". If I put it in a resources subdirectory I pass the path.

 

Tried in a brand new JavaFX project and it gives the same error:

 

package com.example.demo;

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Scene;
import javafx.scene.image.Image;
import javafx.stage.Stage;

import java.io.IOException;

public class HelloApplication extends Application {
	@Override
	public void start(Stage stage) throws IOException {
		FXMLLoader fxmlLoader = new FXMLLoader(HelloApplication.class.getResource("hello-view.fxml"));
		Scene scene = new Scene(fxmlLoader.load(), 320, 240);
		
		// Error occurs when instantiating Image.
		Image icon = new Image("purp.png");
		stage.getIcons().add(icon);
		
		stage.setTitle("Hello!");
		stage.setScene(scene);
		stage.show();
	}

	public static void main(String[] args) {
		launch();
	}
}

 

Anyone know why it's not working?

Java Trainee (Novice)

Thanks in advance~

Link to comment
Share on other sites

Link to post
Share on other sites

21 hours ago, Kiyullo said:

If the image file (named purp.png) is in my src directory, I pass "purp.png"

Put the image in the root project folder, not the src folder.

Main System (Byarlant): Ryzen 7 5800X | Asus B550-Creator ProArt | EK 240mm Basic AIO | 16GB G.Skill DDR4 3200MT/s CAS-14 | XFX Speedster SWFT 210 RX 6600 | Samsung 990 PRO 2TB / Samsung 960 PRO 512GB / 4× Crucial MX500 2TB (RAID-0) | Corsair RM750X | Mellanox ConnectX-3 10G NIC | Inateck USB 3.0 Card | Hyte Y60 Case | Dell U3415W Monitor | Keychron K4 Brown (white backlight)

 

Laptop (Narrative): Lenovo Flex 5 81X20005US | Ryzen 5 4500U | 16GB RAM (soldered) | Vega 6 Graphics | SKHynix P31 1TB NVMe SSD | Intel AX200 Wifi (all-around awesome machine)

 

Proxmox Server (Veda): Ryzen 7 3800XT | AsRock Rack X470D4U | Corsair H80i v2 | 64GB Micron DDR4 ECC 3200MT/s | 4x 10TB WD Whites / 4x 14TB Seagate Exos / 2× Samsung PM963a 960GB SSD | Seasonic Prime Fanless 500W | Intel X540-T2 10G NIC | LSI 9207-8i HBA | Fractal Design Node 804 Case (side panels swapped to show off drives) | VMs: TrueNAS Scale; Ubuntu Server (PiHole/PiVPN/NGINX?); Windows 10 Pro; Ubuntu Server (Apache/MySQL)


Media Center/Video Capture (Jesta Cannon): Ryzen 5 1600X | ASRock B450M Pro4 R2.0 | Noctua NH-L12S | 16GB Crucial DDR4 3200MT/s CAS-22 | EVGA GTX750Ti SC | UMIS NVMe SSD 256GB / Seagate 1.5TB HDD | Corsair CX450M | Viewcast Osprey 260e Video Capture | Mellanox ConnectX-2 10G NIC | LG UH12NS30 BD-ROM | Silverstone Sugo SG-11 Case | Sony XR65A80K

 

Camera: Sony ɑ7II w/ Meike Grip | Sony SEL24240 | Samyang 35mm ƒ/2.8 | Sony SEL50F18F | Sony SEL2870 (kit lens) | PNY Elite Perfomance 512GB SDXC card

 

Network:

Spoiler
                           ┌─────────────── Office/Rack ────────────────────────────────────────────────────────────────────────────┐
Google Fiber Webpass ────── UniFi Security Gateway ─── UniFi Switch 8-60W ─┬─ UniFi Switch Flex XG ═╦═ Veda (Proxmox Virtual Switch)
(500Mbps↑/500Mbps↓)                             UniFi CloudKey Gen2 (PoE) ─┴─ Veda (IPMI)           ╠═ Veda-NAS (HW Passthrough NIC)
╔═══════════════════════════════════════════════════════════════════════════════════════════════════╩═ Narrative (Asus USB 2.5G NIC)
║ ┌────── Closet ──────┐   ┌─────────────── Bedroom ──────────────────────────────────────────────────────┐
╚═ UniFi Switch Flex XG ═╤═ UniFi Switch Flex XG ═╦═ Byarlant
   (PoE)                 │                        ╠═ Narrative (Cable Matters USB-PD 2.5G Ethernet Dongle)
                         │                        ╚═ Jesta Cannon*
                         │ ┌─────────────── Media Center ──────────────────────────────────┐
Notes:                   └─ UniFi Switch 8 ─────────┬─ UniFi Access Point nanoHD (PoE)
═══ is Multi-Gigabit                                ├─ Sony Playstation 4 
─── is Gigabit                                      ├─ Pioneer VSX-S520
* = cable passed to Bedroom from Media Center       ├─ Sony XR65A80K (Google TV)
** = cable passed from Media Center to Bedroom      └─ Work Laptop** (Startech USB-PD Dock)

 

Retired/Other:

Spoiler

Laptop (Rozen-Zulu): Sony VAIO VPCF13WFX | Core i7-740QM | 8GB Patriot DDR3 | GT 425M | Samsung 850EVO 250GB SSD | Blu-ray Drive | Intel 7260 Wifi (lived a good life, retired with honor)

Testbed/Old Desktop (Kshatriya): Xeon X5470 @ 4.0GHz | ZALMAN CNPS9500 | Gigabyte EP45-UD3L | 8GB Nanya DDR2 400MHz | XFX HD6870 DD | OCZ Vertex 3 Max-IOPS 120GB | Corsair CX430M | HooToo USB 3.0 PCIe Card | Osprey 230 Video Capture | NZXT H230 Case

TrueNAS Server (La Vie en Rose): Xeon E3-1241v3 | Supermicro X10SLL-F | Corsair H60 | 32GB Micron DDR3L ECC 1600MHz | 1x Kingston 16GB SSD / Crucial MX500 500GB

Link to comment
Share on other sites

Link to post
Share on other sites

3 hours ago, AbydosOne said:

Put the image in the root project folder, not the src folder.

Tried that. Doesn't work. Also tried putting it in a subdirectory inside of the resources folder and adding the path. Also doesn't work.

 

There has to be some underlying issue that I just don't know about.

Java Trainee (Novice)

Thanks in advance~

Link to comment
Share on other sites

Link to post
Share on other sites

On 11/17/2023 at 1:32 AM, Kiyullo said:
Image icon = new Image("purp.png");

Isn't that supposed to be URI?
Like so:

Image icon = new Image("file:purp.png");

Try that.

VGhlIHF1aWV0ZXIgeW91IGJlY29tZSwgdGhlIG1vcmUgeW91IGFyZSBhYmxlIHRvIGhlYXIu

^ not a crypto wallet

Link to comment
Share on other sites

Link to post
Share on other sites

10 hours ago, Biohazard777 said:

Isn't that supposed to be URI?
Like so:

Image icon = new Image("file:purp.png");

Try that.

Wow that actually worked. I can use the image. 👍

Now even if the specified image does not exist in the project, the object can still instantiate without an error.

It's very strange since in the video it worked normally with the code I was following along with (not the same code used in the demo code from the OP):

 

Maybe they changed how JavaFX works or something.

 

EDIT:

 

Also it says URL, not URI:

    public Image(@NamedArg("url") String var1) {
        this(validateUrl(var1), (InputStream)null, 0.0, 0.0, false, false, false);
        this.initialize((Object)null);
    }

 

Java Trainee (Novice)

Thanks in advance~

Link to comment
Share on other sites

Link to post
Share on other sites

16 hours ago, Biohazard777 said:

Isn't that supposed to be URI?
Like so:

Image icon = new Image("file:purp.png");

Try that.

I tried putting the image in a subdirectory named images in the resources folder. I tried some paths but couldn't get it wo work. What path should I use if it's in resources/images?

 

EDIT:

I figured it out. Kind of. Instead of only putting the path for resources and images, I needed the entire path from the C drive.

That's a bit annoying since different PCs will probably have different paths. How can I keep it in the resource subdirectories while avoiding this issue?

Java Trainee (Novice)

Thanks in advance~

Link to comment
Share on other sites

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×