Midlet 在模拟器中工作,ClassNotFoundException 在手机上
Posted
技术标签:
【中文标题】Midlet 在模拟器中工作,ClassNotFoundException 在手机上【英文标题】:Midlet works in emulator, ClassNotFoundException on phone 【发布时间】:2012-12-26 12:52:50 【问题描述】:我正在为与服务器的蓝牙通信创建简单的 midlet,但我无法让它在我的手机上工作,当我尝试在 Eclipse/Emulator 中运行它时一切正常,但在手机上我得到“无法创建 MIDlet实例:java.lang.ClassNotFoundException"
我在某处看到此异常主要与路径相关,但我没有任何外部 jar 或多个包。
代码如下:
package j2meclient;
import java.io.OutputStream;
import javax.bluetooth.*;
import javax.microedition.io.*;
import javax.microedition.lcdui.*;
import javax.microedition.midlet.*;
public class J2MEClientMidlet extends MIDlet implements CommandListener,
Runnable
Display d;
Command cmExit, cmConnect;
Form f;
Thread t;
String connString;
public J2MEClientMidlet()
f = new Form("Client");
cmExit = new Command("Exit", Command.EXIT, 1);
cmConnect = new Command("Connect", Command.ITEM, 2);
f.addCommand(cmExit);
f.addCommand(cmConnect);
f.setCommandListener(this);
public void startApp()
if (d == null)
d = Display.getDisplay(this);
d.setCurrent(f);
t = new Thread(this);
public void pauseApp()
public void destroyApp(boolean unconditional)
public void commandAction(Command c, Displayable d)
if (c == cmExit)
destroyApp(false);
notifyDestroyed();
if (c == cmConnect)
t.start();
public void run()
try
LocalDevice local = LocalDevice.getLocalDevice();
DiscoveryAgent agent = local.getDiscoveryAgent();
connString = agent.selectService(new UUID(
"86b4d249fb8844d6a756ec265dd1f6a3", false),
ServiceRecord.NOAUTHENTICATE_NOENCRYPT, false);
catch (Exception e)
if (connString != null)
try
StreamConnection conn = (StreamConnection) Connector
.open(connString);
OutputStream out = conn.openOutputStream();
Thread.sleep(2000);
out.write("Hello, World".getBytes());
out.close();
conn.close();
f.append("Message sent correctly");
catch (Exception ex)
f.append("IOException: ");
f.append(ex.getMessage());
else
f.append("Unable to locate service");
JAD;
MIDlet-1: J2MEClient,,J2MEClient
MIDlet-Jar-Size: 2254
MIDlet-Jar-URL: BTClient.jar
MIDlet-Name: BTClient Midlet Suite
MIDlet-Vendor: Midlet Suite Vendor
MIDlet-Version: 1.0.0
MicroEdition-Configuration: CLDC-1.1
MicroEdition-Profile: MIDP-2.0
知道为什么我不能在手机上运行它吗?
【问题讨论】:
Midelt crashes when calling bluetooth API 的可能重复项 【参考方案1】:midlet 的类文件名为J2MEClientMidlet
,但在 jad 文件中它被定义为 J2MEClient。 Midlet 类文件名必须与 jad 上的定义匹配才能从 jad 成功运行。
【讨论】:
以上是关于Midlet 在模拟器中工作,ClassNotFoundException 在手机上的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 ImagePicker 获取图像名称?我得到了图像名称,但它只在模拟器中工作,而不是在实际设备中工作
Android Geolocation在模拟器中工作但不在手机中工作
与 IBAction 链接的 UIButton 不能在物理设备上的模拟中工作,也不能在 Xcode 9.2 中的模拟器中工作