Okay so, I have a Circle
component which I assigned in SceneBuilder. I want to fill this Circle with an ImagePattern object, however I'm running into a weird problem. I'm assigning a lot of images from lots of URL's in a database and they're only set when I click them, and some of the links appear to be broken, but for some reason I can't prevent my program from crashing using try/catch.
Here are examples of working links:
Here is an example of a link which crashes my program:
As you can see the link leads to a Null directory, and I get this error in my console:
Exception in thread "JavaFX Application Thread" java.lang.IllegalArgumentException: Image must be non-null
So I assumed I could fix this with a simple try/catch, so I did the following:
try {
circle.setFill(new ImagePattern(new Image("https://a0.muscache.com/im/pictures/c5b5bc4e-0133-4103-b68e-66f33bbf9e27.jpg?aki_policy=profile_x_medium")));
}
catch (Exception e){
e.printStackTrace();
}
And nada, it doesn't catch my error. I've tried using the correct IllegalArgumentException catch, I've tried ignore the catch, no differences.
I've made a mini recreation of my problem below and the error is still prevalent:
public class Test extends Application {
@Override
public void start(Stage stage){
BorderPane root = new BorderPane();
Circle circle = new Circle(50);
root.setCenter(circle);
// Works fine (Working link)
//circle.setFill(new ImagePattern(new Image("https://a0.muscache.com/im/users/67564/profile_pic/1320663729/original.jpg?aki_policy=profile_x_medium")));
// Dies and cries (Broken link)
try {
circle.setFill(new ImagePattern(new Image("https://a0.muscache.com/im/pictures/c5b5bc4e-0133-4103-b68e-66f33bbf9e27.jpg?aki_policy=profile_x_medium")));
}
catch (Exception e){
e.printStackTrace();
}
scene = new Scene(root);
stage.setTitle("test");
stage.setScene(scene);
stage.show();
}
}
Just to affirm what my goal is, I just want my program to completely ignore this line if the link is invalid, how would I do this? Thanks.
Also in case there's any confusion as to why I'm trying to load a dead link, as I said before I'm loading images from a database so I have no idea which links work and which don't, and I don't know how to check and researching just seems to tell me to use a try/catch.
CodePudding user response:
Okay nevermind I found how to fix it, there's a method in Image
for checking if there's an error:
image.isError()