很抱歉,在J2ME平台发送图片到servlet那篇文章中,我忽略了一个细节没有进行数据类型的转换。这样会导致图片像素的损失,发送到服务器的图片失真。现在将代码重新更新一下,给大家带来不便还请原谅。
public synchronized void connHttp(){
while(true){
System.out.println("httpconn wait now");
if((midplet.getIsSending())){
System.out.println("search");
try{
con=(HttpConnection)Connector.open(URL);
con.setRequestMethod(HttpConnection.POST);
con.setRequestProperty("If-Modified-Since",
"29 Oct 1999 19:43:31 GMT");
con.setRequestProperty("User-Agent",
"Profile/MIDP-2.0 Configuration/CLDC-1.0");
con.setRequestProperty("Content-Language", "en-US");
os=new DataOutputStream(con.openOutputStream());
int[] rgbArg=new int[100*100];
midplet.getImage().getRGB(rgbArg,0,100,0,0,100,100);
byte[] bytes=intTobyte(rgbArg);
os.write(bytes);
//for(int i=0;i<RGBARG.LENGTH;I++){
//os.writeInt(rgbArg[i]);
//System.out.println(rgbArg[i]);
//}
os.flush();
}catch(Exception e){
System.out.println("conn err");
e.printStackTrace();
}finally{
if(os!=null){
try{
os.close();
midplet.setIsSending(false);
midplet.setIsSend(true);
}catch(IOException ioe){};
}
}
midplet.setIsSending(false);
midplet.setIsSend(true);
}
try{
wait();
}catch(Exception e){
System.out.println("wait exception");
e.printStackTrace();
}
}
}
public synchronized void wakeUP(){
notifyAll();
}
private byte[] intTobyte(int[] ints){
byte[] bytes=new byte[ints.length*4];
for(int i=0;i<INTS.LENGTH;I++){
bytes[i*4]=(byte)(0xff&(ints[i]>>>24));
bytes[i*4+1]=(byte)(0xff&(ints[i]>>>16));
bytes[i*4+2]=(byte)(0xff&(ints[i]>>>8));
bytes[i*4+3]=(byte)(0xff&(ints[i]>>>0));
if(i<100){
System.out.println(ints[i]);
}
}
return bytes;
}
客户端的,比上一次多了,一个方法intTobyte()通过这个方法,获得了一个byte类型的数组,直接发送,服务器端,在将这个byte数组还原成一个int数组
=========================================
private void createIamge(DataInputStream io,OutputStream out){
int width = 100;
int height = 100;
int[] rgb=new int[width*height];
try{
int[] bytes=new int[rgb.length*4];
//io.readu(bytes);
//rgb=byteToInt(bytes);
for(int i=0;i<BYTES.LENGTH;I++){
bytes[i]=io.readUnsignedByte();
}
byteToInt(bytes,rgb);
}catch(IOException ioe){ioe.printStackTrace();}
BufferedImage bi = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
bi.setRGB(0,0,100,100,rgb,0,100);
bi.flush();
// encode:
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(bi);
param.setQuality(1.0f, false);
encoder.setJPEGEncodeParam(param);
System.out.println("yeah");
try {
encoder.encode(bi);
}
catch(IOException ioe) {
ioe.printStackTrace();
}
}
private void byteToInt(int[] bytes,int[] rgb){
for(int i=0;i<RGB.LENGTH;I++){
rgb[i]=(
((bytes[i*4]&0xff)<<24)|
((bytes[i*4+1]&0xff)<<16)|
((bytes[i*4+2]&0xff)<<8)|
((bytes[i*4+3]&0xff)<<0));
//System.out.print(ints[i]+"\t"+(ints[i]<<8)+"\t");
if(i<100){
System.out.println(rgb[i]);
}
}
}
上面的是服务器端代码,重点在于readUnsignedByte()这方法。不然很难还原int类型。
相关推荐
本主题聚焦于在J2ME环境中进行手机应用开发,特别是涉及到了RMS(Record Management System)和Servlet两种关键的技术,用于实现数据的本地持久化和后台服务器通信。 **RMS(Record Management System)** RMS是...
【标题】"j2me.jsp.servlet.xml.正则表达式" 涵盖了Java ME、JSP 2.0、Servlet以及XML这四大核心技术,它们在IT领域中都有着广泛的应用,尤其对于Java开发者和网站开发者来说至关重要。下面将详细阐述这些知识点。 ...
【J2ME】:Java Micro Edition,简称J2ME,是Java平台的一个子集,主要用于嵌入式设备和移动设备的开发,如手机、智能家电等。它提供了基础的类库和API,允许开发者创建轻量级的应用程序。 【Servlet】:Servlet是...
J2ME发送短消息实例 J2ME发送短消息实例 J2ME发送短消息实例
在J2ME中,发送短信涉及到使用JSR-120(WMA,Wireless Messaging API)。这个API允许开发者通过GSM或CDMA网络发送和接收文本消息。关键类包括`javax.wireless.messaging.MessageConnection`和`javax.wireless....
在这个例子中,Servlet接收到J2ME客户端发送的查询参数,建立与数据库的连接,执行SQL查询,并处理结果。请注意,实际的数据库连接字符串、用户名、密码以及SQL语句需要根据你的具体环境进行调整。 总结来说,这个...
**J2ME从入门到精通** Java Micro Edition(J2ME)是Java平台的一个子集,主要用于嵌入式系统和移动设备,如早期的智能手机、电视盒和家用电器。本教程将带你逐步深入J2ME的世界,理解其基本概念、开发环境搭建、...
j2me短信发送平台,与大家一起分享我的成果,谢谢支持,非常感激。。。。
单独封装好的类。调用是只有两个参数。一个是 手机号码 还有一个 是 短信内容。非常简单。调试一切OK。
总的来说,手机网络游戏(J2ME+Servlet实现)项目涉及到移动应用开发、服务器端编程、网络通信、数据库管理和分布式系统等多个领域的知识。开发者需要熟练掌握Java语言,理解J2ME和Servlet的工作原理,具备一定的...
import javax.servlet.*; import javax.servlet.http.*; public class MyServlet extends HttpServlet { public void doPost(HttpServletRequest request, HttpServletResponse response )throws IOException, ...
通过这个源码示例,开发者可以学习到实际的短信发送流程,并将其应用于自己的J2ME应用中。同时,Myeclipse和EclipseME插件提供了便捷的开发和测试环境,使得在桌面系统上模拟和调试J2ME应用成为可能。
在接收到J2ME发送的数据后,JSP页面可以解析这些数据,执行必要的业务逻辑,比如验证、处理和存储数据。 5. **与数据库交互**:JSP可以通过Java Servlets、JavaBeans或者使用JDBC(Java Database Connectivity)API...
综合以上,基于J2ME的邮件发送涉及到移动设备编程、网络通信、邮件协议和第三方库的使用等多个方面,实现这一功能需要对这些技术有深入理解。通过提供的文件,我们可以逐步构建和调试一个完整的邮件发送系统,为移动...
在这个特定的场景中,我们讨论的是一个利用J2ME实现的图片上传功能,这涉及到客户端(用户设备上的应用)和服务器端(处理上传请求的后台系统)的交互。 客户端部分: 1. 图片选择:J2ME应用程序通常会通过文件选择...
"J2ME开发.pdf"可能包含J2ME的详细教程或者最佳实践,涵盖从基础语法到高级特性的讲解,包括UI设计(如Form和Canvas类)、数据持久化(RecordStore)、网络编程(HttpConnection和Socket)以及事件处理等。...
【J2ME游戏移植到Android手机】是一个技术性较强的主题,涉及到两个不同的移动平台:Java ME(J2ME)和Android。J2ME是早期移动设备上广泛使用的开发框架,而Android则是现代智能手机的主要操作系统。当需要将J2ME...
总的来说,J2ME MMS的接收与发送涉及到网络通信、消息解析和用户交互等多个技术点。开发者需要熟悉J2ME的API,同时对MMS协议有一定的理解,才能有效地实现这个功能。在实际开发过程中,还需要考虑不同手机平台的兼容...
J2ME从基础到精通的学习,涵盖了广泛的理论和实践知识,下面将深入解析其中的关键点。 1. **J2ME架构** J2ME由配置(Configurations)和框架(Profiles)组成。配置定义了设备的基本硬件和软件能力,如Connected ...