Java me j2me网络连接
我在很多地方读到,j2me应用程序中的网络连接应该在单独的线程中完成。这是必要的还是好的 我这样问是因为我找不到任何地方写这必须在一个单独的线程。此外,当我编写一个简单的应用程序,通过网络获取图像并在屏幕上显示(不使用线程)时,它也不起作用。当我把它改成使用一个单独的线程时,它工作了。我不确定它是否能工作,因为我将它更改为一个单独的线程,因为我也对代码做了许多其他更改 有人能确认一下吗 编辑: 如果不需要在单独的线程中运行,有人能告诉我为什么下面的简单代码不起作用吗 到了这个阶段,仿真器会问“连接到网络可以吗?”。无论我是按“是”还是“否”,屏幕都不会改变Java me j2me网络连接,java-me,mobile,Java Me,Mobile,我在很多地方读到,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的观点,但不需要在单独的线程中进行网络连接,只需要最佳实践。我认为这可能是巧合,连接工作正常后,移动到一个单独的线程。无论哪种方式,如果您想在连接发生时向用户提供任何视觉反馈(考虑到用户在移动网络上可能经历的延迟差异,您可能会这样做),您应该在单独的线程中进行网络处理。不强制要求您在新线程中进行网络连接,然而,实际上你会发现这样做几乎总是一个好主意,因为网络活动可能会阻止你的应用程序并使其处于无响应状态 这是一个很好的例子,但它谈到了网络和用户体验中涉及的一些问题