【发布时间】:2010-03-22 14:34:06
【问题描述】:
我要做什么
我正在编写一个 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 中使用。
有人知道我应该怎么做吗?
【问题讨论】:
-
执行 Class.forName() 足以引发 ClassNotFoundException,因为它会尝试加载类以创建 Class 对象。
-
当然可以,但是由于我捕获了所有异常,它不应该导致应用程序因该异常而停止。
标签: java-me classnotfound jsr75