我想从J2ME midlet调用一个Servlet,所以我已经编写了Servlet URL的HTTPConnection代码来调用GET方法。
当Midlet套件尝试连接到Servlet URL时,我在模拟器中收到以下消息,
{#MyMidlet} Midlet Suite wants to connect to {#Servlet URL} using air time,
this may result in charges, Is it ok to use airtime ?
如果我点击“否”或“是”,则没有任何事情发生,它刚被绞死,我使用的是EclipseME和SUN WTK 2.5.2。在控制台中有一个警告,
Warning: To avoid potential deadlock, operations that may block, such as
networking, should be performed in a different thread than the
commandAction() handler.
这意味着,如果我在单独的线程中进行HttpConnection,问题是否会解决?
答案 0 :(得分:2)
如果我在单独的线程中进行HttpConnection,问题是否会解决?
如果你做对了 - 是的,问题就会解决。这是一个典型的问题,并且有一个独立的解决方案。
警告您指的是midlet中的设计问题。你有“重量级”活动(http连接),它在与UI相同的线程中运行,阻止它并使其无法响应。
避免UI事件线程中的重载。当commandAction
或keyPressed
或pointerPressed
等内容有很多内容时,只需生成一个新线程即可。为了更好地理解为什么,请考虑学习本教程以了解如何正确地做到这一点:
Networking, User Experience, and Threads
本文介绍了MIDlet如何在不影响用户界面的情况下建立网络连接。它包括六个迭代示例,说明多线程网络和等待屏幕的使用......
PrimitiveMidlet
)之后,甚至会对您遇到的问题进行详细说明:
...程序员已经劫持了一个系统线程,用于他自己的冗长处理。当用户选择命令时,系统调用其commandAction()方法。调用此方法的线程属于系统,而不属于开发人员。如果方法快速执行,这不会构成犯罪,但在这种情况下,网络连接可能会长时间占用系统的线程。
在J2SE应用程序编程中,甚至在servlet编程中,系统都会为您创建一个线程,并且对您的处理时间的限制几乎没有限制。 MIDlet线程的规则简单而严格:属于您的唯一线程就是您自己创建的线程。
在MIDlet中,您正在编写系统将从其自己的一个线程调用的代码。例如,当调用MIDlet的startApp(),pauseApp(),destroyApp()和事件处理程序方法时,它们在系统线程内运行。您的方法必须快速返回,以便系统线程可以继续其他工作。任何无法快速完成的任务都必须移出系统的线程。
这种编程风格可能需要一些时间来习惯,因为您实际上只编写从系统线程调用的代码。但是,如果您已经完成了任何其他GUI编程,那么这种技术将会很熟悉。 AWT和Swing有一个事件调度线程,用于处理操作系统事件并在代码中调用事件处理程序。规则是相同的:事件处理程序应该快速执行并将控制权返回给事件派发线程,以便接口的其余部分不会锁定...
答案 1 :(得分:1)
将其连接创建为单独的线程,如下所示:
Thread myConnection = new Thread(new Runnable() {
public void run() {
// TODO open connection here
HttpConnection conn = null;
try {
conn = (HttpConnection) Connector.open(serverURL,
Connector.READ_WRITE, true);
conn.setRequestMethod(HttpConnection.GET); // or POST method
} catch (Exception e) {
// TODO: handle exception
} finally {
// close connection here
}
}
});
myConnection.start();
答案 2 :(得分:-2)
在J2ME中,网络操作被置于单独的线程中。
U将网络模块放在一个单独的线程中。如果你将网络模块放在单独的线程中,则不会出现以下消息。
Warning: To avoid potential deadlock, operations that may block, such as
networking, should be performed in a different thread than the
commandAction() handler.
在J2ME(sun / oracle谁是j2me的所有者)给出了一些限制。为了安全起见,一些API需要可信方证书。为此,一些手机在用户点击是时允许用户获得许可然后它将允许,否则不允许。
以下是API的一些内容,即FileConnection(读/写文件)api,HttpConnection,HttpsConnection等。
你检查你的设备是否支持自签名证书。如果支持意味着你使用自签名证书。
可信方证书价格昂贵。最低成本为每年10000卢比。以下是一些可信赖的供应商Thawte,Verizon,Semantec等