非 JSR-75 设备上的 JSR-75 特定代码?
-
21-09-2019 - |
题
我正在尝试做什么
我正在编写 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 当我尝试这样做时,即使我捕获了所有异常。
我已经进行了项目范围的搜索,以确保除了 Service 和 ServiceImplementation 之外,我没有在其他任何地方使用 FileConnection。
有谁知道我应该怎么做?
解决方案
对你正在做的事情有点困惑,尤其是不同包中的两个类都称为服务!但我在编写在带有或不带有某些 JSR 的手机上运行的代码时遇到了这个问题。
您是否在服务类中引用了 JSR-75 类?我怀疑即使您没有实例化 Service 类,它仍然会被加载。然后 JVM 就会遇到这些不存在的类。
将所有对 JSR-75 类的引用移至从 Service 类引用的类中。
其他提示
显然我可以用这个:
System.getProperty("microedition.io.file.FileConnection.version");
如果返回 null,则不支持 JSR-75。如果它返回任何其他内容,那就是。
不隶属于 StackOverflow