Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java me j2me网络连接_Java Me_Mobile - Fatal编程技术网

Java me j2me网络连接

Java me j2me网络连接,java-me,mobile,Java Me,Mobile,我在很多地方读到,j2me应用程序中的网络连接应该在单独的线程中完成。这是必要的还是好的 我这样问是因为我找不到任何地方写这必须在一个单独的线程。此外,当我编写一个简单的应用程序,通过网络获取图像并在屏幕上显示(不使用线程)时,它也不起作用。当我把它改成使用一个单独的线程时,它工作了。我不确定它是否能工作,因为我将它更改为一个单独的线程,因为我也对代码做了许多其他更改 有人能确认一下吗 编辑: 如果不需要在单独的线程中运行,有人能告诉我为什么下面的简单代码不起作用吗 到了这个阶段,仿真器会问“连

我在很多地方读到,j2me应用程序中的网络连接应该在单独的线程中完成。这是必要的还是好的

我这样问是因为我找不到任何地方写这必须在一个单独的线程。此外,当我编写一个简单的应用程序,通过网络获取图像并在屏幕上显示(不使用线程)时,它也不起作用。当我把它改成使用一个单独的线程时,它工作了。我不确定它是否能工作,因为我将它更改为一个单独的线程,因为我也对代码做了许多其他更改

有人能确认一下吗

编辑: 如果不需要在单独的线程中运行,有人能告诉我为什么下面的简单代码不起作用吗

到了这个阶段,仿真器会问“连接到网络可以吗?”。无论我是按“是”还是“否”,屏幕都不会改变


public class Moo extends MIDlet {

    protected void destroyApp(boolean arg0) throws MIDletStateChangeException {
        // TODO Auto-generated method stub

    }

    protected void pauseApp() {
    }

    protected void startApp() throws MIDletStateChangeException {
        Display display = Display.getDisplay(this);
        MyCanvas myCanvas = new MyCanvas();
        display.setCurrent(myCanvas);
        myCanvas.repaint();

    }

    class MyCanvas extends Canvas {

        protected void paint(Graphics graphics) {
            try {
                Image bgImage = Image.createImage(getWidth(), getHeight());

                HttpConnection httpConnection = (HttpConnection) Connector
                        .open("https://stackoverflow.com/content/img/so/logo.png");
                Image image = Image.createImage(httpConnection
                        .openInputStream());
                bgImage.getGraphics().drawImage(image, 0, 0, 0);
                httpConnection.close();

                graphics.drawImage(bgImage, 0, 0, 0);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

    }

}

编辑:我得到了代码的答案


编辑:我提出了一个单独的问题。

问题是您试图在负责运行UI的线程中执行工作。如果您不使用单独的线程,那么该UI线程正在等待您的工作,并且无法处理任何其他UI更新!因此,是的,您确实不应该在事件处理程序中做任何重要的工作,因为您需要在那里快速返回控制。

我同意Sean的观点,但不需要在单独的线程中进行网络连接,只需要最佳实践。我认为这可能是巧合,连接工作正常后,移动到一个单独的线程。无论哪种方式,如果您想在连接发生时向用户提供任何视觉反馈(考虑到用户在移动网络上可能经历的延迟差异,您可能会这样做),您应该在单独的线程中进行网络处理。

不强制要求您在新线程中进行网络连接,然而,实际上你会发现这样做几乎总是一个好主意,因为网络活动可能会阻止你的应用程序并使其处于无响应状态

这是一个很好的例子,但它谈到了网络和用户体验中涉及的一些问题