Java-在方法外部使用TryCatch
这只是给出了一个错误,我希望能够将一些图像存储在静态变量中,并从另一个类访问它们,而无需实例化它 我可能会创建一个方法来初始化所有这些变量并为它们设置值,但这样变量就不会是静态的Java-在方法外部使用TryCatch,java,Java,这只是给出了一个错误,我希望能够将一些图像存储在静态变量中,并从另一个类访问它们,而无需实例化它 我可能会创建一个方法来初始化所有这些变量并为它们设置值,但这样变量就不会是静态的 我需要TryCatch的原因是Image类的构造函数抛出一个SlickException您可以将异常处理代码放在静态块中 import org.newdawn.slick.Image; import org.newdawn.slick.SlickException; public class Images {
我需要TryCatch的原因是
Image
类的构造函数抛出一个SlickException
您可以将异常处理代码放在静态块中
import org.newdawn.slick.Image;
import org.newdawn.slick.SlickException;
public class Images {
try {
public static Image button = new Image("images/buttons/0/Button.png");
} catch(SlickException e) {
e.printStackTrace();
}
}
您应该使用静态构造函数
public static Image button;
static {
try {
button = new Image("images/buttons/0/Button.png");
} catch(SlickException e) {
e.printStackTrace();
}
}
两种选择:
- 使用静态初始值设定项块
public class Images {
public static Image button;
static{
try {
button = new Image("images/buttons/0/Button.png");
} catch(SlickException e) {
e.printStackTrace();
}
}
}
- 使用方法进行初始化
public static final Image button;
static {
try/catch in here, assign to button
}
就我个人而言,我有点怀疑这是否是一个好主意——让类型初始化做“真正的工作”可能会导致难以追踪的bug。所有引用的代码是否都设置为在出现问题时为空?尝试将其放入静态块中
public static final Image button = createButton();
private static Image createButton() {
try/catch in here
}
只需在块外声明静态变量..它就会工作
public static Image button;
static{
try {
button = new Image("images/buttons/0/Button.png");
} catch(SlickException e) {
e.printStackTrace();
}
}
使用静态块进行初始化,并特别注意不要吞咽异常:
public static final Image button = setImageButt();
public static Image setImageButt(){
try {
button = new Image("images/buttons/0/Button.png");
} catch(SlickException e) {
e.printStackTrace();
}
}
我从您的代码中更正了一些内容:
- 在初始值设定项中创建图像意味着它应该是一个常量,因此是final
- 常量应该有大写的名称,因此按钮
- 初始化期间的异常不应忽略,但应正确指示。否则,您可能会花费数小时调试找不到映像,因为没有初始化失败的迹象。ExceptionInInitializerError是在这种情况下抛出的标准异常
还有其他的解决方案,但这是最干净的IMO。为了找到解决方案,我曾经遇到过类似的问题。我已经解决了类似的问题,只是把所有的代码放在默认构造函数中
public static Image button;
static {
try {
button = new Image("images/buttons/0/Button.png");
} catch(SlickException e) {
e.printStackTrace();
}
}
您的解决方案代码如下所示:
public class Images {
public final static Image BUTTON;
static {
Image i;
try {
i = new Image("images/buttons/0/Button.png");
} catch (SlickException e) {
throw new ExceptionInInitializerError(e);
}
BUTTON = i;
}
}
什么错误?您能给我们提供更多的细节吗?也许还可以添加最终版
。然后,编译器强制您考虑在该catch块中分配什么。在静态初始值设定项中初始化图像很糟糕,因为您要么吃掉异常,返回null(或whoops img),要么使用以下LinkageError使整个应用程序崩溃,有时会被掩盖和吃掉,而且是意外的。