我想从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 ?

如果我点击No或Yes,什么都没有发生,它只是被绞死了,我正在使用EclipseME和SUN WTK2.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,问题会得到解决吗?

有帮助吗?

解决方案

如果我确实在单独的线程中制作HttpConnection,问题会得到解决吗?

如果你做得对-是的,问题就会解决。这是一个典型的问题,有standatd解决方案。

您引用的警告表示midlet中的设计问题。你有"重量级"活动(http连接)在与UI相同的线程中运行,阻止它并使其不负责任。

避免UI事件线程的重载。当有很多事情要做的时候 commandActionkeyPressedpointerPressed 等,只是产生一个新的线程来做到这一点。为了更好地理解这是为什么,请考虑学习本教程以了解如何正确地做到这一点:

网络、用户体验和线程

本文介绍MIDlet如何在不影响用户界面的情况下建立网络连接。它包括六个迭代示例,说明多线程网络和等待屏幕的使用。..

  • 在教程中的第一个例子之后(PrimitiveMidlet),甚至还有你遇到的问题的详细解释:

    ...程序员劫持了一个系统线程来进行他自己的冗长处理。当用户选择命令时,系统调用他的commandAction()方法。调用此方法的线程属于系统,而不是开发人员。如果该方法快速执行,这不会是犯罪,但在这种情况下,网络连接可能会占用系统的线程很长一段时间。

    在J2SE应用程序编程中,甚至在servlet编程中,系统会为您创建一个线程,并且对您的处理可能需要多长时间的限制很少。MIDlet线程的规则简单而严格:属于您的唯一线程是您自己创建的线程。

    在MIDlet中,您正在编写系统将从其自己的线程之一调用的代码。例如,当调用MIDlet的startApp()、pauseApp()、destroyApp()和事件处理程序方法时,它们在系统线程内运行。您的方法必须快速返回,以便系统线程可以继续其其他工作。任何不能快速完成的任务都必须移出系统的线程。

    这种编程风格可能需要一些时间来适应,因为您实际上只是编写从系统线程调用的代码。但是,如果您已经完成了任何其他GUI编程,这种技术将是熟悉的。AWT和Swing有一个事件调度线程,它处理操作系统事件并在代码中调用事件处理程序。规则是一样的:事件处理程序应该快速执行并将控制权返回给事件调度线程,以便接口的其余部分不会锁定。..

教程中的更多代码示例展示了如何修复上述设计错误,以及如何使MIDlet用户界面与网络活动顺利地互操作。

其他提示

将其连接作为如下单独的线程:

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();
.


在J2ME中,网络操作被放入单独的线程中。

Warning: To avoid potential deadlock, operations that may block, such as 
 networking, should be performed in a different thread than the 
 commandAction() handler.
.


在J2ME(是J2ME的所有者的Sun / Oracle)提供了一些限制。对于安全性,一些API需要可信任的方证书。如果某些手机询问用户单击“是”允许用户,请允许用户点击是的,否则它不会允许。
以下是某些API所在的情况下是FileConnection(读/写入文件)API,HTTPConnection,HTTPSConection等。
检查您的设备是否支持自签名证书。如果支持意味着您使用自签名证书。 值得信赖的派对证书昂贵。每年最低成本是Ruppees 10000。以下是一些可信党供应商Thawte,Verizon,Semantec等等

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top