关于非JSR-75设备的JSR-75特定代码?

时间:2010-03-22 14:34:06

标签: java-me classnotfound jsr75

我正在尝试做什么

我正在编写J2ME midlet,我想使用JSR-75来编写文件。我还希望能够在不支持JSR-75的设备上运行我的应用程序。

我是怎么做的

我找到了一个网站,解释了如何执行此操作(忘记了网址,抱歉):

  • 创建一个公开所有功能的公共抽象类(“服务”)。
  • 创建一个扩展此抽象类的包私有类(“ServiceImplementation”),实现所有功能。
  • 将两者放在一个单独的包中,将Service呈现为包的外观。

要实例化此类,请使用抽象类中的以下方法:

public static Service getInstance() {
    try {
        Class.forName("javax.microedition.io.file.FileConnection");
        Class c = Class.forName("my.package.Service");
        Service service = (Service) (c.newInstance());
        return service;
    } catch (Exception e) {
        return null;
    }
}

出了什么问题

当JSR-75存在时,这非常有效。问题是我希望这个midlet也可以在非JSR-75设备上运行,并且当我尝试这样做时,这段代码抛出一个ClassNotFoundException:javax / microedition / io / file / FileConnection,即使我正在捕获所有异常

我已经完成了一个项目范围的搜索,以确保我在其他任何地方都没有使用FileConnection,而是在Service和ServiceImplementation中。

有谁知道我应该怎么做?

2 个答案:

答案 0 :(得分:0)

显然我可以用这个:

System.getProperty("microedition.io.file.FileConnection.version");

如果返回null,则不支持JSR-75。如果它返回任何其他内容,则为。

答案 1 :(得分:0)

对你正在做的事情略有困惑,特别是在不同的包中有两个叫做Service的类!但是在编写代码以便在有或没有某些JSR的情况下在手机上运行时我遇到了这个问题。

您是否在Service类中引用了JSR-75类?我怀疑即使你没有实例化Service类,它仍然被加载。然后JVM会遇到这些不存在的类。

将对JSR-75类的所有引用移动到从Service类引用的类中。