常见问题

Sun JavaTM Wireless Toolkit for CLDC

2007 年 9 月

 

安装
一般问题
仿真器问题
错误诊断问题

安装

提取阶段安装失败。我收到一条消息,内容为:

Extracting the installation files...
Error!CRCs do not match!Got e61aebb2, expected f53ddfb0
Failed to extract files.Installation will stop now.

您所使用的 Java 归档 (Java Archive, JAR) 实用程序可能不兼容。安装程序会提示您输入 Java 解释器的路径。您必须提供完整的 JavaTM Platform, Standard Edition (Java SE SDK) 1.5.0 版安装路径。

提取阶段安装失败。我收到一条消息,内容为:

...
/usr/java/jre1.5.0_08/bin/jar:No such file or directory
Failed to extract files.Installation will stop now.

仅安装 JRE 是不够的,您还需要安装 1.5.0 版的 Java Development Kit (JDK)。请安装完整的 JavaTM Platform, Standard Edition (Java SE)。安装过程中,请提供完整的 Java SE 安装路径。

发行说明中描述了如何在 Windows 平台上安装 SNAP Mobile 仿真环境。如何使 SnapMobileSample MIDlet 在 Linux 上正常工作?

  1. 根据发行说明中的说明将 SNAP Mobile 仿真环境安装在您网络中任何 Windows 计算机上。
  2. 启动 SNAP 服务器仿真器。
  3. SnapMobileSample.jad 文件中的属性 "SNAP-Mobile-Host" 更改为运行 SNAP 服务器仿真器的计算机名称。

我在 Windows 98 SE 上成功地进行了安装,但遇到了一些问题。

本安装不支持 Windows 98 SE 平台。Windows XP 是唯一支持的平台,如 docs/BinaryReleasNotes.html 中所述。

一般问题

如果此工具包是用 Java 编写的,为何要等那么久才能在其他平台上使用?

尽管此工具包的用户界面用 Java SE 编写,但该产品包含大量特定于平台的本机代码,包括 Java ME 虚拟机的完整实现。每种平台都需要单独的研发工作,以移植、测试和维护本机代码。

我已更新了我的 JDK。我该如何使仿真器使用此更新的 JDK?

您不能将仿真器指向不同的安装位置。您可以将新的 JDK 安装在与旧的 JDK 相同的位置,也可以卸载并重新安装,同时提供新 JDK 的路径。

如何快速入门?

如果要快速学会如何使用 KToolbar,可以试着打开并运行一些演示项目。也可以检查和修改演示程序的源代码。要了解更多信息,请访问这里

我可以在命令行中使用此工具包吗?

有。有关更多信息,请参见用户指南的附录 B。

我可以在何处查找有关 MIDP、CLDC、MMAPI 和 WMA 的更多信息?

有关更多信息,请访问以下链接:

我可以为 MIDP 1.0 设备构建应用程序吗?

可以,您可以为多种软件产品包构建应用程序。单击设置...按钮以编辑项目设置,然后在 API 选择选项卡上选择所需的配置、配置文件和可选包。

我创建了一个新项目。接下来应该怎么做?

接下来是编辑项目的源代码。KToolbar 控制台中的消息将告诉您源代码、资源文件和库文件的放置位置。如果您还是不确定该如何做,请参阅用户指南第 2 章中的简单示例。

项目的 Java 应用程序描述符 (Java Application Descriptor, JAD) 和 Java 归档 (Java Archive, JAR) 文件位于何处?

首先,需要对项目进行打包,具体方法是:在 KToolbar 菜单中选择项目 > 打包 > 生成包。MIDlet 套件描述符和 JAR 文件位于项目的 bin 目录下。

在已创建了项目的目录后,我还可以对其进行更改吗?

编辑 wtklib/Windows/ktools.properties 以添加以下属性:
kvem.apps.dir = 新建项目目录

要获得完整的项目管理功能,可以考虑使用 NetBeans Mobility Pack

我可以使用混淆器吗?

有。该工具包支持 ProGuard 并且包括支持所有混淆器的架构。有关更多信息,请参见用户指南。

我可以使用调试器吗?

有。您最好将 Sun Java Wireless Toolkit for CLDC 与 IDE 中的调试器配合使用。要了解使用调试器的更多信息,请参见用户指南。

如何确保应用程序只使用特定的 API(例如只使用 MIDP 2.0 API)?

在“设置”对话框中选择“API 选择”选项卡,然后选择希望使用的目标平台和 API。

我可以在 Java ME 应用程序中使用除 HTTP 和 HTTPS 之外的网络协议吗?

有。MIDP 2.0 规范引入了对套接字、服务器套接字、数据报、SSL 以及串行 (COMM) 通讯的可选支持。WMA 规范支持 SMS、CBS 和 MMS 消息传送。工具包对 JSR 75 和 JSR 82 的支持还增加了文件、蓝牙以及 OBEX 连接。

如何测试推送注册表?

要查看为响应传入网络连接而启动的 MIDlet,需要使用“通过 OTA 运行”功能来运行您的应用程序。“通过 OTA 运行”会模拟在设备上安装应用程序的过程,然后会根据推送注册表中的条目正确响应传入网络连接。有关更多信息,请参见用户指南。

在 Linux 上运行时如何访问通讯端口?

您必须在命令行设置以下权限(请注意,您必须具有超级用户权限):

chmod a+w /dev/ttyS[01]

我该如何将 MIDlet 套件传送到真实设备?

这完全取决于设备。支持 MIDP 的所有设备制造商都必须提供机制,以将 MIDlet 传送到自己生产的设备。

我可以将 Wireless Toolkit 连接到外部蓝牙设备(例如移动电话)吗?

不可以,Wireless Toolkit 无法与无线设备通讯。

仿真器问题

为什么仿真器询问我是否能够连接到网络?

根据应用程序运行时所在的保护域,仿真器可能要求具备某些操作权限,包括网络访问权限。有关 MIDP 2.0 中的权限和保护域的概述,请参见 Understanding MIDP 2.0's Security Architecture

虽然我没在 API 选择项目设置中选择 API,却仍然可以在仿真器中使用 API。这是怎么回事呢?

API 选择项目设置只适用于构建。仿真器始终支持所有可用的 API。

仿真器不能正确显示除英语以外的其他语言形式的文本。如何改变字体?

要显示除英语以外的其他语言形式的文本,请执行以下步骤:

仿真器显示的设备图像太小。如何放大图像?
在仿真器中如何启用触摸屏事件?
如何更改设备可用的字符编码转换器集?

有关如何修改默认仿真器的信息,请参见基本自定义指南。

错误诊断问题

在将演示 MIDlet 部署到真实设备时遇到困难。为什么?

某些演示 MIDlet 是为 MSA 平台而构建的,并使用 MIDP 2.1 配置文件(请检查其 .jad.jar 文件)。许多设备不支持如此新的配置文件。要更改您的项目设置使其适合设备功能,请单击设置...按钮。在“设置”窗口中单击左侧的“API 选择”。在“API 选择”窗格中,选择除 MSA 之外的目标平台以及除 MIDP 2.1 之外的配置文件。选择配置以及所有可选包。单击“确定”。

我的 MIDlet 不能与服务器进行通讯。为什么?

请确保您的服务器使用了正确的 HTTP 版本。您可以在 KToolbar 首选项中调整仿真器所使用的版本。使用网络监视器是调试网络问题的有效方法。有关详细信息,请参见用户指南。

连接可能会因为您使用防火墙而失败。转至“首选项”>“网络配置”>“用户代理服务器”并提供代理信息。

为什么我的设备不能识别已签名的 MIDlet 套件?

真实网络上的真实设备可能具有制造商或无线运营商所特有的根证书。有关已签名的 MIDlet 的详细信息,请向您的设备制造商或无线运营商咨询。

我使用一个可信赖密钥为 MIDlet 加上签名,但是当我将其安装在我的设备上时,此 MIDlet 却被分类为不可信赖。怎么回事?

当项目的安全策略与设备的安全策略不匹配时,可能会出现这种情况。仿真器可以将安全策略切换为 MSA 或 JTWI,但设备却不能,不是 MSA 就是 JTWI,但不可能两者兼具。要避免出现此问题,必须确保 MIDlet 安全策略与设备的安全策略相匹配。

例如,我们假设您使用 MSA 安全策略开发 MIDlet,并使用名为 trustedkey 的默认签名证书为 MIDlet 加上签名(该证书有一个对应的根证书,属于 MSA 安全策略制造商域)。接下来,您决定将此 MIDlet 安装在运行 JTWI 的真实设备上。您将仿真器安全策略切换为 JTWI,并开始通过 OTA 安装。仿真器将在制造商域中查找 trustedkey 的根证书。这是一个问题,因为 JTWI 安全策略中没有制造商,因此 MIDlet 不会被识别为可信赖 MIDlet。安装过程中,仿真器将显示证书的内容并要求您确认安装。安装虽然成功完成,但 MIDlet 被视为不可信赖。设备上的安全策略无法辨别根证书时,只会有这种运作模式。

运行 MIDlet 时出现安全警报。为什么不能使此警报消失?

您可能尝试通过 commandAction() 方法访问受保护的 API(例如,打开连接),但这将锁定该 UI 线程。请通过其他线程访问受保护的 API。有关如何进行此操作的示例,请参阅 NetworkDemo。

在我运行仿真器时,仿真器出现故障并显示以下消息之一。如何解决此问题?

  Title:drwtsn32.exe - Unable To Locate Component
  Content:This aplication has failed to start because dbgeng.dll was not found.

  Re-installing the application may fix this problem.

  Error:Can not find soundbank path in registry.

您的 Windows 安装位置中缺少以下一个或多个文件:

windows-directory\system32\drivers\gm.dls
windows-directory\system32\drwatson.exe
windows-directory\system32\dbgeng.dll

将缺少的文件从标准 Windows 安装位置复制到有问题的安装位置并重新启动。

我使用的是连接到 Internet 的应用程序并收到了错误代码。我需要更改工具包中的设置吗?

有。选择“首选项”>“网络”>“代理服务器”并指定代理信息。

JSR172Demo 调用了 sunwireless.quimbik.com,但此服务器没有响应。有其他服务器供我使用吗?

有。JSR172Demo 使用 http://cds.cmsg.sun.com:80/serverscript/serverscript

为什么在运行预校验程序时收到 "Error loading class..." 消息?

首先,请检查 Java 源和库是否可以使用 CLDC 和 MIDP API。

然后,确保将 Sun Java Wireless Toolkit for CLDC 安装在路径不包含任何空格的目录中。例如,该工具包不能使用 C:\Program Files\WTK25 路径。

如果您将该工具包安装在路径含有空格的目录中,必须先进行卸载,然后重新安装到路径名不包含任何空格的目录中。

我要使用一个外部库,但当我尝试构建一个使用此库的 MIDlet 套件时,收到 "Error preverifying class..." 消息。为何会这样?

发生此错误的原因可能是您所使用的是为 Java 2 Platform, Standard Edition(J2SETM 平台)编写的类库。本工具包支持 MIDP 应用程序的开发,比 J2SE 版本的功能少。

我创建了一个使用第三方库的应用程序。我没有碰到编译或预验证问题,却收到了以下错误消息。如何解决此问题?
Uncaught exception java/lang/NoClassDefFoundError:java/awt/Frame:Cannot create class in system package.

要使用第三方库,请参见“项目”>“属性”>“外部 API”以及用户指南。请注意,由于安全性限制,您不能在系统包中创建类(例如 javajavax. 和 com.sun.)。

我编写了一个用于发送 SMS 消息的应用程序但失败了,消息为 *Type not supported*。

您应传递 MessageConnection.TEXT_MESSAGE 并添加有效负载,如下所示:

smsconn = (MessageConnection)Connector.open(address);

TextMessage txtmessage = (TextMessage)smsconn.newMessage(
MessageConnection.TEXT_MESSAGE);
txtmessage.setAddress(address);
txtmessage.setPayloadText(messageBox.getString());
smsconn.send(txtmessage);

有关完整的代码示例,请参见 SMSDemo 示例。

我有其他问题,但是在这找不到答案。

请访问开发人员论坛或通过以下网址提交您的意见:developer.sun.com。