Try/Catch 没有从 JavaFX 中的 URL 捕获我的空图像异常
Try/Catch isn't catching my null Image exception from URL in JavaFX
好的,我在 SceneBuilder 中分配了一个 Circle
组件。我想用一个 ImagePattern 对象填充这个 Circle,但是我 运行 遇到了一个奇怪的问题。我正在从数据库中的许多 URL 中分配大量图像,它们仅在我单击它们时设置,并且一些 link 似乎已损坏,但对于某些原因是我无法使用 try/catch.
阻止我的程序崩溃
以下是 links 的工作示例:
这是一个 link 的例子,它使我的程序崩溃:
如您所见,link 指向 Null 目录,我在控制台中收到此错误:
Exception in thread "JavaFX Application Thread" java.lang.IllegalArgumentException: Image must be non-null
所以我假设我可以用一个简单的 try/catch 来解决这个问题,所以我做了以下事情:
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();
}
还有 nada,它没有发现我的错误。我试过使用正确的 IllegalArgumentException 捕获,我试过忽略捕获,没有区别。
我在下面对我的问题做了一个小复原,错误仍然很普遍:
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();
}
}
只是为了确认我的目标是什么,我只想让我的程序在 link 无效时完全忽略这一行,我该怎么做?谢谢。
此外,如果有人对我为什么要加载一个死的 link 感到困惑,正如我之前所说,我正在从数据库加载图像,所以我不知道哪个 link 的工作,哪些不工作,我不知道如何检查和研究似乎只是告诉我使用 try/catch。
没关系,我找到了修复方法,Image
中有一个方法可以检查是否有错误:
image.isError()
好的,我在 SceneBuilder 中分配了一个 Circle
组件。我想用一个 ImagePattern 对象填充这个 Circle,但是我 运行 遇到了一个奇怪的问题。我正在从数据库中的许多 URL 中分配大量图像,它们仅在我单击它们时设置,并且一些 link 似乎已损坏,但对于某些原因是我无法使用 try/catch.
以下是 links 的工作示例:
这是一个 link 的例子,它使我的程序崩溃:
如您所见,link 指向 Null 目录,我在控制台中收到此错误:
Exception in thread "JavaFX Application Thread" java.lang.IllegalArgumentException: Image must be non-null
所以我假设我可以用一个简单的 try/catch 来解决这个问题,所以我做了以下事情:
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();
}
还有 nada,它没有发现我的错误。我试过使用正确的 IllegalArgumentException 捕获,我试过忽略捕获,没有区别。
我在下面对我的问题做了一个小复原,错误仍然很普遍:
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();
}
}
只是为了确认我的目标是什么,我只想让我的程序在 link 无效时完全忽略这一行,我该怎么做?谢谢。
此外,如果有人对我为什么要加载一个死的 link 感到困惑,正如我之前所说,我正在从数据库加载图像,所以我不知道哪个 link 的工作,哪些不工作,我不知道如何检查和研究似乎只是告诉我使用 try/catch。
没关系,我找到了修复方法,Image
中有一个方法可以检查是否有错误:
image.isError()