我正在尝试将图像加载为枚举的一部分,但它引发异常,我找不到用try catch围绕它的方法,是否还有其他方法,还是不可能?

这是一些注释的代码,我正在使用Slick2d库。

    public enum Material {
//An enum of different materials, with different propierties and images

GRASS (5, false, null, true),

//Here I try to load an Image, but loading images throw an Exception, a Slick Exception I tried surronding it with try catch but its not working.
DIRT (5, false, new Image("res/Dirt.png"), true), 

WOOD (10, false, null, false), 

SNOW (1, false, null, false), 

ICE (1, false, null, false), 

LEAVES (1, false, null, false), 

STONE(15, false, null, false), 

COBBLESTONE(10, false, null, false), 

LOG(15, false, null, false),

AIR(1, false, null, false);


///variables
private int Resis;
private boolean traspasable;
private static Image I;
private boolean TreesCanGrow;

//getters
public int getResis(){
    return this.Resis;
}

public Image getTile(){
    return this.I;
}

public boolean isTraspasable(){

return this.traspasable;

}

public boolean getTreesCanGrow(){

return this.TreesCanGrow;

}


///constructor
private Material(int ExplosionResis, boolean isTraspasable, Image I, boolean TCG){  
this.Resis = ExplosionResis;
this.traspasable = isTraspasable;
this.TreesCanGrow = TCG;    
}


}

编辑:新的Contructor

///constructor
try {
    private Material(int ExplosionResis, boolean isTraspasable, String image, boolean TCG){ 
        this.Resis = ExplosionResis;
        this.traspasable = isTraspasable;
        this.TreesCanGrow = TCG;    
        this.I = new Image(image);
    }
}
catch (SlickException e) {
    e.printStackTrace();
}

}

===============>>#1 票数:3 已采纳

我不建议将可能失败的代码放在枚举构造函数中或作为枚举值声明的参数。 如果代码引发异常,则枚举类可能不会加载。

您可以尝试这样的事情:

/** An enum of different materials, with different properties and images. */
public enum Material {
  GRASS (5, false, null, true),

  DIRT (5, false, "res/Dirt.png", true), 

  ...

  AIR(1, false, null, false);


  private final int resis;
  private final boolean traspasable;
  private final String imagePath;
  private Image image;
  private final boolean treesCanGrow;

  private Material(int resis, boolean traspasable, String imagePath,
      boolean treesCanGrow) {  
    this.resis = resis;
    this.traspasable = traspasable;
    this.imagePath = imagePath;
    this.treesCanGrow = treesCanGrow;    
  }

  public synchronized Image getTile() throws SlickException {
    if (image == null && imagePath != null) {
      image = new Image(imagePath);
    }
    return image;
  }
}

但是,就我个人而言,我更喜欢枚举是不可变的,因此,如果这是我的代码,我会将Image的创建放在其他地方(也许放在延迟加载的Map<Material, Image>中)。

  ask by Zaphyk translate from so

未解决问题?本站智能推荐:

1回复

Java:为枚举获取ExceptionInInitializerError

编辑:解决了,但是我不明白为什么 在PokemonEnum中,我有这条线 我将其更改为: 现在可以了。 我什至从未使用过该数组,所以我不知道为什么会出错或为什么静态要修复它。 我还没有真正与Enums一起工作,所以我真的不知道为什么在运行main时为什么会遇到Ex
1回复

Java枚举返回Null

我目前正在使用SpigotAPI为Minecraft创建一个插件。 我将其发布在这里的原因是因为我认为这是Java错误。 我正在创建一个Duells插件,该插件将在我的代码内遍历枚举,并查看它是否为特定类型。 第一次在它周围使用它可以正常工作,没有问题。 但是,当我第二次尝试而不重新启动
4回复

如何从枚举构造函数中抛出异常

(参考这篇文章: 如何从枚举构造函数中抛出异常? ) 我真的想做同样的事情。 示例代码: 如果url不正确,程序应该崩溃,因为这将是一个编程错误,所以在构造函数中捕获异常会是错误的,不是吗? 解决这个问题的最佳方法是什么?
4回复

验证Java中成功的字符串到枚举转换

我有一个定义为Web服务实现中的枚举的帐户类型列表。 但是,当使用者调用Web服务时,它传递一个需要转换为枚举的字符串。 有什么好的方法可以验证给定的String是否可以成功转换为枚举? 我使用的是以下方法,但这可能是对异常的滥用(根据Effective Java,第57条)。
2回复

枚举更改与添加新异常。 需要重新编译吗?

这个问题基于“ 干净代码 ”的“功能”章节, “ Error.java依赖项磁铁”部分 。 作者声称,在进行更改的情况下,必须重新编译所有导入和使用此enum类。 这与添加新的Exception派生相反。 在后一种情况下,据说不需要重新编译。 但是,是否不是这样,如果您通过添加
2回复

在Hibernate中的模型(域)类中使用枚举-无法解析属性-异常

在表中,我为应用,选定,未选定等保存了整数值。我想在Java Domain类中使用Enum。 我尝试实现它。 当我从DAO调用此域时,出现了一些奇怪的错误。 请在下面找到代码。 使用此方法调用上述域类时, 我收到此错误, 请告诉我我错了。 希望我的问题清楚。 先
1回复

libGDX中带有枚举的ExceptionInInitializerError

我有以下枚举文件“ DevelopmentCardType”: 发生套接字事件时,将创建一个新的DevelopmentCard “ DevelopmentCard”类: 创建新的DevelopmentCard时,它将创建一个ExceptionInInitializerErr
4回复

异常处理模式

这是我看到的常见模式,其中与异常关联的错误代码存储为静态最终整数。 当创建要抛出的异常时,它将使用这些代码之一以及错误消息构造。 这导致该方法要抓住它必须查看代码然后决定一个行动方案。 替代似乎是 - 为每个异常错误情况声明一个类(虽然相关的异常将从一个公共基类中解除) 有中间地
1回复

我如何在Kotlin中声明一个仅接受枚举的参数

例如:我要声明一个异常: 在Java中,我可以通过
3回复

Hibernate / JPA bug - 无法识别枚举中的某些字符串

我在类中有一个枚举,由Hibernate映射。 其中一个映射字段是和枚举类型,它具有以下值之一OK , NOK或NAP 。 NOK或NAP按预期工作,但是当该类设置为“OK”时,Hibernate无法映射并检索该值,该值设置为null: 该班有: 如果我将OK更改为OK2 ,