问题描述
手机拍照能运行,但是却无法保存到本地和上传,可是有调用这些方法,还希望各位大虾与高手们能帮我看看哪里出现问题了。小妹在此十分感谢!packagesavatolocal;importjava.io.IOException;importjava.io.OutputStream;importjavax.microedition.io.Connector;importjavax.microedition.io.file.FileConnection;importjavax.microedition.lcdui.Canvas;importjavax.microedition.lcdui.Command;importjavax.microedition.lcdui.CommandListener;importjavax.microedition.lcdui.Displayable;importjavax.microedition.lcdui.Graphics;importjavax.microedition.lcdui.Image;importjavax.microedition.media.Manager;importjavax.microedition.media.Player;importjavax.microedition.media.control.VideoControl;publicclassMyCanvasextendsCanvasimplementsCommandListener,Runnable{privatePlayerplayer=null;privateVideoControlvc=null;PicCanvaspc=null;privateCommandcmdShoot=newCommand("拍照",Command.ITEM,0);privateCommandcmdBack=newCommand("返回",Command.BACK,0);privateImageshowImg=null;privateMainMidletmidlet=null;privatebooleanshootIt=false;privatebooleanrunit=true;privatebooleanfirstSet=true;publicMyCanvas(MainMidletm){midlet=m;runit=true;try{player=Manager.createPlayer("capture://video");player.realize();vc=(VideoControl)player.getControl("VideoControl");if(vc!=null){vc.initDisplayMode(VideoControl.USE_DIRECT_VIDEO,this);}player.start();}catch(Exceptione){System.out.println("initError:"+e.toString());}this.addCommand(cmdShoot);this.addCommand(cmdBack);this.setCommandListener(this);(newThread(this)).start();}protectedvoidpaint(Graphicsg){try{g.setColor(0xFFFFFF);g.fillRect(0,0,getWidth(),getHeight());if(vc!=null&&firstSet){vc.setVisible(true);vc.setDisplayLocation(3,3);vc.setDisplaySize(this.getWidth()-6,this.getHeight()-6);firstSet=false;}g.setColor(0x0);}catch(Exceptione){System.out.println("no");}}publicvoidcommandAction(Commandcmd,Displayablearg1){if(cmd.equals(cmdShoot)){this.shootIt=true;}elseif(cmd.equals(cmdBack)){midlet.display.setCurrent(midlet.lstMenu);vc=null;player.close();player=null;}}publicImagegetImage(){this.shootIt=false;Imageimg=null;try{byte[]buf;buf=vc.getSnapshot("encoding=jpeg");img=Image.createImage(buf,0,buf.length);}catch(Exceptione){System.out.println("拍照出现错误");}returnimg;}privatevoidsaveToLocal(byte[]byteArray){Stringroot="file:///root1/pxx.jpeg";FileConnectionfc=null;try{fc=(FileConnection)Connector.open(root);System.out.println("fileisExist:"+fc.exists());if(!fc.exists()){fc.create();}OutputStreamos=fc.openOutputStream();os.write(byteArray);os.close();}catch(IOExceptione1){//TODOAuto-generatedcatchblocke1.printStackTrace();}}publicvoidrun(){while(runit){try{Thread.sleep(1000);}catch(Exceptione){System.out.println("no");}repaint();if(this.shootIt){try{showImg=getImage();vc=null;player.close();player=null;runit=false;PicCanvaspc=newPicCanvas(showImg,midlet);midlet.display.setCurrent(pc);byte[]data=pc.getFileBytes();saveToLocal(data);}catch(Exceptione){System.out.println("no");}}}}}
解决方案
解决方案二:
packagesavatolocal;importjava.io.ByteArrayOutputStream;importjava.io.IOException;importjava.io.InputStream;importjava.util.Hashtable;importjavax.microedition.io.Connector;importjavax.microedition.io.file.FileConnection;importjavax.microedition.lcdui.Canvas;importjavax.microedition.lcdui.Command;importjavax.microedition.lcdui.CommandListener;importjavax.microedition.lcdui.Displayable;importjavax.microedition.lcdui.Graphics;importjavax.microedition.lcdui.Image;publicclassPicCanvasextendsCanvasimplementsCommandListener{privateImageimg=null;privateMainMidletmidlet=null;privatestaticImageshowImg=null;privateintx=0;privateinty=0;privateintwidth=0;privateintheight=0;privateCommandcmdBack=newCommand("返回",Command.BACK,0);privateCommandcmdUp=newCommand("上传",Command.OK,0);publicPicCanvas(Imagepic,MainMidletm){this.img=pic;this.midlet=m;this.width=this.img.getWidth();this.height=this.img.getHeight();this.addCommand(cmdUp);this.addCommand(cmdBack);this.setCommandListener(this);}protectedvoidpaint(Graphicsg){try{showImg=scaleImage(img,this.width,this.height);g.drawImage(showImg,x,y,0);}catch(OutOfMemoryErrore){System.out.println("你的手机不行");}finally{}}publicImagescaleImage(Imagesrc,intdstW,intdstH){intsrcW=src.getWidth();intsrcH=src.getHeight();Imagetmp=Image.createImage(dstW,srcH);Graphicsg=tmp.getGraphics();intdelta=(srcW<<16)/dstW;intpos=delta/2;for(intx=0;x<dstW;x++){g.setClip(x,0,1,srcH);g.drawImage(src,x-(pos>>16),0,Graphics.LEFT|Graphics.TOP);pos+=delta;}Imagedst=Image.createImage(dstW,dstH);g=dst.getGraphics();delta=(srcH<<16)/dstH;pos=delta/2;for(inty=0;y<dstH;y++){g.setClip(0,y,dstW,1);g.drawImage(tmp,0,y-(pos>>16),Graphics.LEFT|Graphics.TOP);pos+=delta;}returndst;}publicvoidcommandAction(Commandcmd,Displayablearg1){if(cmd.equals(cmdBack)){this.midlet.display.setCurrent(midlet.lstMenu);}elseif(cmd.equals(cmdUp)){uploadImage();}}privatevoiduploadImage(){byte[]fileBytes=getFileBytes();if(fileBytes==null){return;}Hashtableparams=newHashtable();params.put("custom_param","param_value");params.put("custom_param2","param_value2");HttpMultipartRequestreq;try{req=newHttpMultipartRequest("http://192.168.1.157:8080/xmpp/upload/upload.action",params,"uploadFile","pxx.png","image/png",fileBytes);byte[]response=req.send();System.out.println(String.valueOf(response));}catch(Exceptione){e.printStackTrace();}}byte[]getFileBytes(){showImg=scaleImage(img,this.width,this.height);Stringroot="file:///root1/pxx.jpeg";FileConnectionfc=null;byte[]a=null;try{fc=(FileConnection)Connector.open(root);System.out.println("fileisExist:"+fc.exists());if(!fc.exists()){fc.create();returna;}int[]raw=newint[showImg.getWidth()*showImg.getHeight()];showImg.getRGB(raw,0,showImg.getWidth(),0,0,showImg.getWidth(),showImg.getHeight());byte[]data=null;InputStreamis=fc.openInputStream();ByteArrayOutputStreamout=newByteArrayOutputStream(4096);byte[]tmp=convertIntToByte(raw);intn;while((n=is.read(tmp))!=-1){out.write(tmp,0,n);out.flush();}is.close();out.close();data=out.toByteArray();if(fc!=null){fc.close();}returndata;}catch(IOExceptione1){e1.printStackTrace();}returnnull;}/*publicbyte[]getByteArray(Imageimage){int[]raw=newint[image.getWidth()*image.getHeight()];image.getRGB(raw,0,image.getWidth(),0,0,image.getWidth(),image.getHeight());byte[]data=convertIntToByte(raw);returndata;}*/privatestaticbyte[]convertIntToByte(int[]data){if(data==null){returnnull;}byte[]byteArr=newbyte[data.length<<2];for(inti=0;i<data.length;i++){intnum=data[i];byteArr[i*4+0]=(byte)(num>>>0);byteArr[i*4+1]=(byte)(num>>>8);byteArr[i*4+2]=(byte)(num>>>16);byteArr[i*4+3]=(byte)(num>>>24);}returnbyteArr;}}
解决方案三:
packagesavatolocal;importjava.io.ByteArrayOutputStream;importjava.io.InputStream;importjava.io.OutputStream;importjava.util.Enumeration;importjava.util.Hashtable;importjavax.microedition.io.Connector;importjavax.microedition.io.HttpConnection;publicclassHttpMultipartRequest{staticfinalStringBOUNDARY="----------V2ymHFg03ehbqgZCaKO6jy";byte[]postBytes=null;Stringurl=null;publicHttpMultipartRequest(Stringurl,Hashtableparams,StringfileField,StringfileName,StringfileType,byte[]fileBytes)throwsException{this.url=url;Stringboundary=getBoundaryString();StringboundaryMessage=getBoundaryMessage(boundary,params,fileField,fileName,fileType);StringendBoundary="rn--"+boundary+"--rn";ByteArrayOutputStreambos=newByteArrayOutputStream();bos.write(boundaryMessage.getBytes());bos.write(fileBytes);bos.write(endBoundary.getBytes());this.postBytes=bos.toByteArray();bos.close();}StringgetBoundaryString(){returnBOUNDARY;}/*****req=newHttpMultipartRequest("http://192.168.1.14/li/b.php",params,"upload_field","original_filename.png","image/png",fileBytes);byte[]response=req.send();System.out.println(String.valueOf(response));*@paramboundary*@paramparams*@paramfileField*@paramfileName*@paramfileType*@return*/StringgetBoundaryMessage(Stringboundary,Hashtableparams,StringfileField,StringfileName,StringfileType){StringBufferres=newStringBuffer("--").append(boundary).append("rn");Enumerationkeys=params.keys();while(keys.hasMoreElements()){Stringkey=(String)keys.nextElement();Stringvalue=(String)params.get(key);res.append("Content-Disposition:form-data;name="").append(key).append(""rn").append("rn").append(value).append("rn").append("--").append(boundary).append("rn");}res.append("Content-Disposition:form-data;name="").append(fileField).append("";filename="").append(fileName).append(""rn").append("Content-Type:").append(fileType).append("rnrn");returnres.toString();}publicbyte[]send()throwsException{HttpConnectionhc=null;InputStreamis=null;ByteArrayOutputStreambos=newByteArrayOutputStream();byte[]res=null;try{hc=(HttpConnection)Connector.open(url);hc.setRequestProperty("Content-Type","multipart/form-data;boundary="+getBoundaryString());hc.setRequestMethod(HttpConnection.POST);OutputStreamdout=hc.openOutputStream();dout.write(postBytes);dout.close();intch;is=hc.openInputStream();while((ch=is.read())!=-1){bos.write(ch);}res=bos.toByteArray();}catch(Exceptione){e.printStackTrace();}finally{try{if(bos!=null)bos.close();if(is!=null)is.close();if(hc!=null)hc.close();}catch(Exceptione2){e2.printStackTrace();}}returnres;}}
解决方案四:
packagesavatolocal;importjavax.microedition.lcdui.Command;importjavax.microedition.lcdui.CommandListener;importjavax.microedition.lcdui.Display;importjavax.microedition.lcdui.Displayable;importjavax.microedition.lcdui.List;importjavax.microedition.midlet.MIDlet;importjavax.microedition.midlet.MIDletStateChangeException;publicclassMainMidletextendsMIDletimplementsCommandListener{ListlstMenu;Displaydisplay;CommandcmdSelect;MyCanvasmyCan;Stringname="手机拍照";publicMainMidlet(){display=Display.getDisplay(this);lstMenu=newList(name,List.IMPLICIT);lstMenu.append("拍照",null);lstMenu.append("退出",null);cmdSelect=newCommand("确定",Command.OK,0);lstMenu.addCommand(cmdSelect);lstMenu.setCommandListener(this);}protectedvoidstartApp()throwsMIDletStateChangeException{display.setCurrent(lstMenu);}publicvoidcommandAction(Commandcmd,Displayabledis){if(cmd.equals(cmdSelect)){switch(lstMenu.getSelectedIndex()){case0:myCan=newMyCanvas(this);display.setCurrent(myCan);break;case1:this.notifyDestroyed();break;}}}protectedvoiddestroyApp(booleanarg0)throwsMIDletStateChangeException{//TODOAuto-generatedmethodstub}protectedvoidpauseApp(){//TODOAuto-generatedmethodstub}}
解决方案五:
该回复于2011-04-01 13:44:38被版主删除
解决方案六:
运行了一下。。Warning:Toavoidpotentialdeadlock,operationsthatmayblock,suchasnetworking,shouldbeperformedinadifferentthreadthanthecommandAction()handler.你联网上传的代码需要单开一个线程。
解决方案七:
该回复于2011-04-06 11:15:04被版主删除