用户操作
[即时聊天] [发私信] [加为好友]
黑马王子ID:fzw98
36017次访问,排名3415(-1),好友2人,关注者25人。
java
fzw98的文章
原创 308 篇
翻译 0 篇
转载 24 篇
评论 22 篇
黑马王子的公告
阿里通网络电话,中国最优秀的网络电话 要向天下名师学习,这里应有尽有。 要向天下名师学习,这里应有尽有。
最近评论
catheriner66:推荐一下:开源人网站www.vifir.com 上面有比较全面系统的EXTJS学习资料
catheriner66:推荐一下:开源人网站www.vifir.com 上面有比较全面系统的EXTJS学习资料
合肥菲利浦斯电子科技:合肥菲利浦斯电子科技

菲利浦斯电子科技(合肥)有限公司,是美国菲利浦斯国际产业集团(Philipus Industry Group Ltd.CO.USA)在中国的市场运营和品牌管理机构,负责全面拓展“菲利浦斯”在中国市场的营销网络,造福中国民众。

针对中国目前严峻的室内空气污染形势,“菲利浦斯”把眼光投向中国市场。美国菲利浦斯国际产业……
合肥菲利浦斯电子科技:合肥菲利浦斯电子科技

菲利浦斯电子科技(合肥)有限公司,是美国菲利浦斯国际产业集团(Philipus Industry Group Ltd.CO.USA)在中国的市场运营和品牌管理机构,负责全面拓展“菲利浦斯”在中国市场的营销网络,造福中国民众。

针对中国目前严峻的室内空气污染形势,“菲利浦斯”把眼光投向中国市场。美国菲利浦斯国际产业……
zhangwenbo:学习了……
文章分类
收藏
    相册
    真我的风采
    存档
    软件项目交易
    订阅我的博客
    XML聚合  FeedSky
    订阅到鲜果
    订阅到Google
    订阅到抓虾
    订阅到BlogLines
    订阅到Yahoo
    订阅到GouGou
    订阅到飞鸽
    订阅到Rojo
    订阅到newsgator
    订阅到netvibes

    原创 J2ME中通过Http协议传输图片收藏

    新一篇: MySQL左关联一例 | 旧一篇: 教你用InstallAnywhere制作JAVA程序的安装程序


      曾经在CSDN看到多位网友问图片传输的问题,因此决定写篇文章讲述一个问题,最后通过实例演示如何解决这个问题并提供源代码。如果你对联网中的操作以及多线程还不熟悉那么请参考本站如下文章。
      编写高效友好的多线程J2ME联网应用
      开发J2ME低级联网应用
      开发J2ME联网应用程序
      其实传输图片和传输其他的数据没有什么区别只是我们选择怎样的处理方法,如果我们传输java基本数据类型或者String那么比较容易,直接writeInt() readInt()等方法就可以了。如果是传输一整个对象比如一个人的信息,那么可以使用序列化把它拆开为按照一定的顺序传输多个java的基本类型和String。至于图片显得要特殊一点,因为它是二进制的文件,Java中的InputStream提供了方法来读取二进制文件,如果你对此方面的知识不熟悉请参考使用Java操作二进制文件。
      在我们联网的时候同样还是要在另外一个线程进行,为了提高效率我们使用wait()和notify()来调度线程,线程启动后会进入wait()的状态,因为我们在midlet对象上调用了wait()。当用户按了Connect Command后我们调用midlet.notify()来让线程继续运行。
      if (cmd == connCommand)
      {
      synchronized (this)
      {
      notify();
      }
      } else if (cmd == exitCommand)
      {
      exitMIDlet();
      }
      synchronized (midlet)
      {
      try
      {
      midlet.wait();
      } catch (InterruptedException e)
      {
      e.printStackTrace();
      }
      }
      System.out.println("connect to server...");
      当读取Image文件的时候,我们建立连接后就可以得到InputStream的实例了,接收数据显得比较重要。我采用的方法是新建一个ByteArrayOutputStream实例baos,然后通过read()得到字节首先写入到baos里面去。传输结束后通过baos.toByteArray()得到Image的字节数据,这样我们就可以很容易的构建出图片来了,最后把它显示在Form里面。
      httpConn = (HttpConnection) Connector.open(URL);
      is = httpConn.openInputStream();
      ByteArrayOutputStream baos = new ByteArrayOutputStream();
      int ch = 0;
      while ((ch = is.read()) != -1)
      {
      baos.write(ch);
      }
      byte[] imageData = baos.toByteArray();
      Image image = Image.createImage(imageData, 0, imageData.length);
      midlet.setImage(image);
      baos.close();
      is.close();
      httpConn.close();
      首先你应该在web服务器上放一个大小适中的png格式的图片,然后运行本程序进行联网,这样就可以通过http协议传输图片了。
      
      
      
      
      
      
      
      
      
      
      
      下面是源代码
      import javax.microedition.midlet.MIDlet;
      import javax.microedition.midlet.MIDletStateChangeException;
      import javax.microedition.lcdui.*;
      import java.io.*;
      import javax.microedition.io.*;
      public class ImageGetter extends MIDlet implements CommandListener
      {
      private Display display;
      public static final Command connCommand = new Command("Connect",
      Command.ITEM, 1);
      public static final Command exitCommand = new Command("Exit", Command.EXIT,
      1);
      private Form mainForm;
      private GetterThread gt;
      protected void startApp() throws MIDletStateChangeException
      {
      display = Display.getDisplay(this);
      mainForm = new Form("Image Getter");
      mainForm.append("Click Connect to get Image");
      mainForm.addCommand(connCommand);
      mainForm.addCommand(exitCommand);
      mainForm.setCommandListener(this);
      display.setCurrent(mainForm);
      gt = new GetterThread(this);
      gt.start();
      }
      public void setImage(Image image)
      {
      mainForm.append(image);
      display.setCurrent(mainForm);
      }
      protected void pauseApp()
      {
      }
      protected void destroyApp(boolean arg0) throws MIDletStateChangeException
      {
      }
      public void commandAction(Command cmd, Displayable disp)
      {
      if (cmd == connCommand)
      {
      synchronized (this)
      {
      notify();
      }
      } else if (cmd == exitCommand)
      {
      exitMIDlet();
      }
      }
      private void exitMIDlet()
      {
      try
      {
      destroyApp(false);
      notifyDestroyed();
      } catch (MIDletStateChangeException e)
      {
      e.printStackTrace();
      }
      }
      class GetterThread extends Thread
      {
      private ImageGetter midlet;
      public static final String URL = "http://localhost/j2medev.png";
      private HttpConnection httpConn = null;
      private InputStream is = null;
      public GetterThread(ImageGetter midlet)
      {
      this.midlet = midlet;
      }
      public void run()
      {
      synchronized (midlet)
      {
      try
      {
      midlet.wait();
      } catch (InterruptedException e)
      {
      e.printStackTrace();
      }
      }
      System.out.println("connect to server...");
      try
      {
      httpConn = (HttpConnection) Connector.open(URL);
      is = httpConn.openInputStream();
      ByteArrayOutputStream baos = new ByteArrayOutputStream();
      int ch = 0;
      while ((ch = is.read()) != -1)
      {
      baos.write(ch);
      }
      byte[] imageData = baos.toByteArray();
      Image image = Image.createImage(imageData, 0, imageData.length);
      midlet.setImage(image);
      baos.close();
      is.close();
      httpConn.close();
      } catch (IOException e)
      {
      e.printStackTrace();
      }
      }
      }
      }
      

    发表于 @ 2008年01月30日 11:33:00|评论(loading...)|编辑

    新一篇: MySQL左关联一例 | 旧一篇: 教你用InstallAnywhere制作JAVA程序的安装程序

    评论:没有评论。

    发表评论  


    登录
    Csdn Blog version 3.1a
    Copyright © 黑马王子