Java me 非JSR-75设备上的JSR-75特定代码?

Java me 非JSR-75设备上的JSR-75特定代码?,java-me,classnotfound,jsr75,Java Me,Classnotfound,Jsr75,我想做的事 我正在编写一个J2ME midlet,我想使用JSR-75来编写文件。我还希望能够在不支持JSR-75的设备上运行我的应用程序 我是怎么做的 我发现了一个网站,解释了如何做到这一点(忘记了URL,抱歉): 创建公开所有功能的公共抽象类(“服务”) 创建一个包私有类(“ServiceImplementation”),扩展这个抽象类,实现所有功能 将两者放在一个单独的包中,将服务呈现为包的外观 要实例化此类,请使用抽象类中的以下方法: public static Service ge

我想做的事

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

我是怎么做的

我发现了一个网站,解释了如何做到这一点(忘记了URL,抱歉):

  • 创建公开所有功能的公共抽象类(“服务”)
  • 创建一个包私有类(“ServiceImplementation”),扩展这个抽象类,实现所有功能
  • 将两者放在一个单独的包中,将服务呈现为包的外观
要实例化此类,请使用抽象类中的以下方法:

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之外,我没有在其他任何地方使用FileConnection


有人知道我该怎么做吗?

显然我可以用这个:

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

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

对您正在做的事情有点困惑,特别是对于不同包中的两个类,它们都称为Service!但我在编写代码以在有或没有特定JSR的手机上运行时遇到了这个问题

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


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

执行class.forName()足以引发ClassNotFoundException,因为它试图加载类以创建类对象。当然,但由于我捕获了所有异常,它不应该导致应用程序因该异常而停止。我已经在这样做了。我只有一个名为Service的类和一个名为ServiceImplementation的类,它们都在同一个包中。后者是包私有的,这是我引用JSR-75类的唯一类。不管怎样,现在都解决了。我只是不明白为什么本应捕获的异常仍然被抛出,导致应用程序停止。服务(从所有手机访问)是否引用ServiceImplementation(引用JSR-75)?尝试将JSR-75引用移动到另一个仅从ServiceImplementation引用的类。没有任何对象直接引用ServiceImplementation。唯一的“引用”在服务中,如下所示:Class.forName(“my.package.ServiceImplementation”).newInstance()。但正如你在我自己的答案评论中所看到的,它现在起作用了。两种方法都应该起作用。如果你用If(System.getProperty(“microedition.io.file.FileConnection.version”)!=null替换上面代码中的{Class.forName(“javax.microedition.io.file.FileConnection”);…等等,{…一切正常吗?是的,这种方法有效。我想接受我的答案作为接受的答案,但我还得再等5个小时。。。