Java me 使用j2me语言通过sms将图像从一个移动设备发送到另一个移动设备

Java me 使用j2me语言通过sms将图像从一个移动设备发送到另一个移动设备,java-me,Java Me,我正在用j2me编写一个移动应用程序,其中我需要通过sms将图像从一个移动设备发送到另一个移动设备。 接收端遇到问题。图像未正确解码。它引发ioexception…我正在此处发布代码..请帮助我 import javax.microedition.midlet.*; import javax.microedition.lcdui.*; import javax.microedition.io.*; import javax.wireless.messaging.*; import java.io

我正在用j2me编写一个移动应用程序,其中我需要通过sms将图像从一个移动设备发送到另一个移动设备。 接收端遇到问题。图像未正确解码。它引发ioexception…我正在此处发布代码..请帮助我

import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import javax.microedition.io.*;
import javax.wireless.messaging.*;
import java.io.IOException;
import javax.microedition.lcdui.game.*;
import java.lang.*;
import java.io.*;

public class receive_mms extends MIDlet implements CommandListener
 {
    Display disp;
    //TextBox txtbox;
    MessageConnection msgConn;  
    Message msg;
    Form frm=null;
    byte[] msgrev;
    byte[] data;
    //String msgrev;
    Image im=null;
    Image im1=null;
    ImageItem img=null;
    int i,j;
    ByteArrayInputStream bais = null;
    Command cmd_exit;


public receive_mms(){
    disp=Display.getDisplay(this);
    frm=new Form("photo dikho");
    i=frm.getWidth();
    j=frm.getHeight();
    cmd_exit=new Command("exit",Command.EXIT,1);
    frm.addCommand(cmd_exit);
    frm.setCommandListener(this);
    disp.setCurrent(frm);

    Thread t1 = new Thread()
    {
        public void run()
        {recieve();}
    };
    t1.start();


    //txtbox=new TextBox("Recieve Text","",100,TextField.ANY);      

}

public void commandAction(Command c,Displayable d)
{   
          if(c==cmd_exit)
       {  
           notifyDestroyed();          
       }
}




public void startApp(){/*
disp.setCurrent(frm);

    Thread t1 = new Thread()
    {
        public void run()
        {recieve();}
    };
    t1.start();


    */
}
public void pauseApp(){}
public void destroyApp(boolean unconditional){}

public void recieve(){
    //while(true)
    //{
        String mSenderAddress="";
        try{

        msgConn = (MessageConnection) Connector.open("sms://:1234");
        System.out.println("11");
        msg = msgConn.receive();// start listening and stuck here until a msg is received
        System.out.println("12");
        mSenderAddress = msg.getAddress();// Get info from message, from where da msg is beign sent
        System.out.println("3");
        System.out.println("add"+ mSenderAddress);
        System.out.println("msg aya:" + msg);
    msgConn.close();
        }catch(Exception e){System.out.println(e);}


        if (msg instanceof BinaryMessage) {
        //try{
            msgrev = ((BinaryMessage)msg).getPayloadData(); 
            data=msgrev.toByteArray();
            String val= new String(data);   
            System.out.println("yahoo");

            System.out.println("yahoo1");

    System.out.println(val);
            create(data); 


        }

}
public void create(byte[] bs)
{
    try
    {         
               String str=bs.toString();
            /*
            StringBuffer d=new StringBuffer();
             bais=new ByteArrayInputStream(bs);
             DataInputStream ds=new DataInputStream(bais);
             int len=bs.length;
             System.out.println("len="+len);
             if(len!=0)
             {
              int ch=0;
              while((ch=ds.read())!=-1)
              {
               d.append((char)ch);
              }

             }
        System.out.println(d);
        str=d.toString();
        */
        //str=bs.toString();
        InputStream is= this.getClass().getResourceAsStream(str);
        System.out.println("string is"+str);           
        im = (Image)Image.createImage(is);
        System.out.println("line");
        im1 = (Image)Image.createImage(im, 0, 0, i, j, Sprite.TRANS_NONE);
        img = new ImageItem("yeh photo snd hui", im1, Item.LAYOUT_CENTER, "kyu nhi dikh rhi", Item.BUTTON);
        frm.append(img);



    }
    catch (Exception e)
    {
        System.out.println(e);
    }

}
}

你在做一些非常奇怪的事情:

  • 将字节数组转换为字符串,尤其是使用byte[].toString()
  • 试图通过使用从字节数组创建的字符串调用Class.getResourceAsStream()来获取InputStream
  • 使用SMS发送图像
  • getResourceAsStream()用于获取一个字符串,该字符串标识MIDlet的jar文件中的资源文件

    正确的方法是从BinaryMessage中获取字节[],并使用它使用Image.createImage(bytes,0,bytes.length)创建图像

    虽然,当你使用短信发送它时,我希望它确实是一个非常小的图像,否则任何使用此应用程序的人都会因为将一个大图像拆分到多个短信上而招致高昂的成本。还要注意的是,一些网络限制了SMS可以拆分成的部分的数量


    您最好研究由提供的彩信发送功能。

    如果您的数据流出现错误,以下是您必须执行的操作:

    public void create(byte[] bs)
    {
        try
        {      
                im = (Image)Image.createImage(bs, 0, bs.length);                
                im1 = (Image)Image.createImage(im, 0, 0, i, j, Sprite.TRANS_NONE);
                img = new ImageItem("yeh photo snd hui", im1, Item.LAYOUT_CENTER, "kyu nhi dikh rhi", Item.BUTTON);
                frm.append(img);
        }
        catch (Exception e)
        {
                System.out.println(e);
        }
    }
    

    这应该有效。

    例外情况在哪里?发布堆栈跟踪或至少是抛出堆栈跟踪的代码行可能会有所帮助。IOException.toString()是否包含消息?