java想得到一个纯色固定大小java imageiconn,一定要从外部读取image么?如果不从外部读取,应该如何写代码

java 怎样把sql server2000读取出来的图片显示在JLable上??_百度知道
java 怎样把sql server2000读取出来的图片显示在JLable上??
提问者采纳
imageData数据库读取byte[]Icon img
= new ImageIcon(byte[] imageData);JLabel jl = new JLabel(Icon image);
其他类似问题
为您推荐:
其他4条回答
数据库查处应该数据流java swing应该图片数据流转换张图片jlabel
你要建立连接
等待大侠出现!
JLable可以放图片吗?
您可能关注的推广回答者:
java的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁Java项目打包成Jar文件后图片不显示的问题解决 - CSDN博客
出现这种问题的原因大多是因为路径的问题,往往是在项目中运行正常,但是一旦打包成Jar后就不能正常显示了,下面总结一下解决此类问题的方法:&
一、通过使用外部资源文件的方式解决
把项目打包生成Jar后,再新建一文件夹,把项目中所有使用的图片文件和生成Jar文件放在该目录下,只要代码对图片文件的引用路径正确,如:ImageIcon image=new ImageIcon(SwingResourceManager.getImage(&imagefilePath&));就可以了。
这种方式下,图片文件与类文件不是一块放在包中的,类文件在包中,而图片文件在项目根目录下。
二、通过使用内部资源文件的方式解决
把所用的图片文件放在项目使用的包中,打包时把图片文件同时打进Jar文件中。这种方式在具体代码中应使用下面其中一种:
1.ImageIcon image = new ImageIcon(this.getClass().getResource(&imagefilePath&));
2.ImageIcon image = new ImageIcon(main.class.getResource(&imagefilePath&));
3.ImageIcon = SwingResourceManager.getImage(main.class,&imagefilePath&);
4.3.ImageIcon = SwingResourceManager.getImage(this.getClass(),&imagefilePath&);
3和4中第一个参数代表图片文件路径的参照对象,不能少,否则不能正确获得图片资源。
最后,朋友们一定要注意大小写的问题,在项目中文件名的大小写没有影响,但是打包后,就必须注意文件名大小写问题了,否则也是不行的。&
==================================================================================================================
在编写完Java程序后,打包成Jar时发布,会发现找不到Jar文件中的图片和文本文件,其原因是程序中载入图片或文本文件时,使用了以当前工作路径为基准的方式来指定文件和路径。这与用户运行Jar包时的当前工作路径并不一致。 问题分析:&
例如:以Windows为例说明,以下是开发项目“AAA”的部分代码,开发和调试时的根路径为D:\aaa,这样程序运行时当前路径为&D:\aaa&,大家可以用System.getProperty(&user.dir&)方法求证当前用户工作路径。 //下面代码使用了基于当前工作路径的方式指定了文件对象 File &imageFile &= &new &File(&/images/sample.gif&); ImageIcon &imageIcon &= &new &ImageIcon(File.toURI); File
&iniFile &= &new &File(&/conf.ini&);&
FileInputStream &fileInputStream &= &new &FileInputStream(iniFile.toURI); &
以上的代码应用绝对路径信息指定了文件对象,在开发和调试期(未打包前),是没有问题的,但在打包后,由于所有图片文件和文本文件都将打包到Jar文件中,由于System中的&user.dir&属性发生了变化,会造成用绝对路径的方式无法找到Jar文件中包含路径和文件。例如大家将上面的项目 “AAA”中的所有类文件、图片文件和文本文件等打包为E:\aaa.jar文件并发布,在用户执行该aaa.jar中的程序时,当前路径取决于用户运行该程序的当前路径。 例如: &在“E:\”目录下运行该程序: E:\& java &-jar
此时用户的当前路径(System的user.dir属性)是“E:\”,而非开发者所期望的“E:\aaa”,所以会按以下路径来搜索文件: & & E:\images\sample.gif & & E:\conf.ini&
但是所有的图片和文本文件包含在E:\aaa.jar文件中,所以会致使程序无法正常运行。 问题解决:&
为了解决上述问题,推荐采用Java本身以类为基准的路径搜索方式。 例如: /*&
& *以下代码采用了以当前类为基准的路径指定方式。下面这行代码在运行时,会&
& *在jar文件中的根路径,搜索程序中用到的文件。 Reader &reader &=new &InputStreamReader(&
& & & & getClass().getResourceAsStream(&/image/Environment.ini&)); ImageIcon &i=new &ImageIcon(getClass().getResource(&/image/b1.gif&)); 以上两行代码采用了下面两条Java语句:&
& & & & getClass().getResourceAsStream(&FileName&);&
& & & & getClass().getResource(&File&); 含有这种代码的程序在运行时,以类(类路径)为基准,而不依赖当前路径(System中的user.dir)。&
注意:上面的路径&/image/Environment.ini&如果写成&image/Environment.ini&,将表示在类同路径下的路径
(className/image/Environment.ini),这需要您必须将图片和文本等文件的保存路径,和程序中指定的路径两者保持一致。&
import java.io.BufferedR import java.io.IOE import java.io.InputS&
import java.io.InputStreamR public class Test { public Test (){ try {&
// &&/Test/123.txt& 相对于包的路径,区分大小写&
InputStream input= this .getClass () .getResourceAsStream ( & /image/sample.gif & ) &
System.out.println ( this .getClass () .getResource ( &/ conf.ini & )) ; BufferedReader in= new BufferedReader ( new InputStreamReader ( input )) ; S&
while ( true ){ a=in.readLine () &if ( a== null )&
System.out.println ( a+ &-----& ) &}&
in.close () &
} catch ( IOException e ) { e.printStackTrace () &} }&
public static void main ( String [] args ){ new Test () & & } }
==================================================================================================
注意:在开发和调试期(未打包前)使用上述方法是无效的。> java webservice 传输资料
java webservice 传输资料
xiejun_buaa & &
发布时间: & &
浏览:9 & &
回复:0 & &
悬赏:0.0希赛币
java webservice 传输文件
  阅读本文前您需要以下的知识和工具:
JavaTM Web Services Developer Pack 1.1,并且会使用初步使用
Apache axis1.1
初步了解JAX-RPC编程方法
SAAJ、JAXM编程的基本技能
有图像处理的一般知识
  本文的参考资料见&参考资料
  本文的全部代码在这里&下载
  BOLB、CLOB数据传输方法
  在SOAP消息中,复杂的数据类型包括记录、对象和结构等,还包括图像、声音等多媒体数据。在记录、结构的数据,可以利用XML本身的机制进行表示,比如要表示一些查询的图书的信息,可以使用以下的方法进行表示:
  例程1 在SOAP消息中表示复杂的数据
  &soap-env:Envelope xmlns:soap-env=&;&
&soap-env:Header/&
&soap-env:Body&
&books:GetAllBooks xmlns:books=&;&
&books:book id=&isbn-34-234-xxxx-34&&
&books:name&J2EE Web 服务开发 &/books:name&
&books:publisher& 电子工业出版社 &/books:publisher&
&books:price& xxxxx &/books:price&
&books:category&计算机&/books:category&
&books:description& xxxxxxxxx &/books:description&
&books:author& xxxxxx &/books:author&
&books:author& xxxxx &/books:author&
&/books:book&
&books:bookid=&242334&&
… &/books:book&
&/books:GetAllBooks&
&/soap-env:Body& &/soap-env:Envelope& 另一个例子: &myFavoriteNumbers
SOAP-ENC:arrayType=&xsd:int[2]&&
&number&3&/number&
&number&4&/number&
&/myFavoriteNumbers&
  除了使用上述的方式传输外,还可以使用序列化对象的方式。我们知道,Java中的序列化对象可以在网络上传输、保存。具体的过程是把这些数据保存在可序列化的Java对象中,然后把此对象序列化传输到对方,对方对此序列化对象进行&解冻&,然后获得要传输的数据。相对于直接用XML表示数据,这种方式比较消耗系统资源。
  SOAP消息基于XML技术,XML在表示文本方面有很大的便利性,但是如果要在XML中表示图像、声音等多媒体数据(这里指把图像、声音等数据包含在同一个XML文件中,而不是使用外部实体),那么就不是那么简单了。理论上,你也可以把要传输的BLOB、CLOB数据保存在序列化的Java对象中,然后以序列化的Java对象为载体进行传输。但是这些一种非常的低效的方法!
  要在SOAP中传输BLOB数据,通常有以下两种方法:
使用BASE64编码,把要传输的数据直接作为SOAP Body中的一部分
作为MIME附件,附加在SOAP消息上
  对于CLOB数据,不需要使用BASE64编码,可以直接作为SOAP Body的一部分或者作为MIME附件传输。
  本文将使用以上两种方式,以图像传输为例子讨论在SOAP消息中传输BLOB、CLOB数据的方法。首先我们看怎么使用BASE64编码来传输图形。
  回页首
  使用BASE64编码传输BLOB数据
  使用BASE64编码来传输BLOB数据的基本过程是:
在服务端读取目标BLOB数据保存在byte[]中;
使用BASE64Encoder(编码器,如sun.misc.BASE64Encoder)把byte[]编码成String;
当客户端发出请求时,就返回这个String;
客户端从SOAP消息中读取这个String;
使用BASE64Decode(解码器,如sun.misc.BASE64Decoder)把String解码成byte[];
对byte[]进行处理(如果时图像,就把它还原成图像;如果是声音,将把它还原成声音)
  下面我们结合图形传输来看具体的编程实现。在这里我们使用JAX-RPC的方式,您需要有Apache axis引擎。
  首先是确定服务端的接口,这里定义了一个方法:getImage(String imageName)。如例程2所示。
  例程2 JAX-RPC服务端接口
  package com.hellking. public interface ImageServiceInterface extends java.rmi.Remote {
public java.lang.String getImage(java.lang.String in0) throws java.rmi.RemoteE }
  注意getImage方法返回的数据类型,它是String,也就是通过BASE64编码后的String。
  使用这个接口生成WSDL文件,可以使用下面的方法:
  SET AXIS_HOME=&axis安装目录& set CLASSPATH=%CLASSPATH%; %AXIS_HOME%/axis-1_1/lib/axis.
%AXIS_HOME%/axis-1_1/lib/jaxrpc.
%AXIS_HOME%/axis-1_1/lib/saaj. %AXIS_HOME%/axis-1_1/lib/commons-logging. %AXIS_HOME%/axis-1_1/lib/commons-discovery. %AXIS_HOME%/axis-1_1/lib/wsdl4j.. java org.apache.axis.wsdl.Java2WSDL -o w//localhost:8080/axis/services/ImageService&
-n &urn:ImageService& -p&com.hellking.webservice& &urn:ImageService& com.hellking.webservice.ImageServiceInterface
  以上方法将生成一个名为wp.wsdl的WSDL文件,生成了WSDL文件后,就可以使用WSDL2Java生成JAX-RPC的框架,如下所示:
  java org.apache.axis.wsdl.WSDL2Java -o . -d Session -s -S true
-Nurn:ImageService com.hellking.webservice wp.wsdl
  这个框架中,有一个名为ImageServiceSoapBindingImpl的类,我们要在里面增加实现方法。
  修改后的ImageServiceSoapBindingImpl如例程3所示。
  例程3 JAX-RPC服务端实现类
  package com.hellking. import java.io.*; public class ImageServiceSoapBindingImpl implements com.hellking.webservice.ImageServiceInterface{
public java.lang.String getImage(java.lang.String in0) throws java.rmi.RemoteException {
String ret=new String();
byte[] bytes=new byte[1024000];//小于1M
InputStream in=ImageServiceSoapBindingImpl.class.getResourceAsStream(in0);
in.read(bytes);
ret=new sun.misc.BASE64Encoder().encode(bytes); //具体的编码方法
in.close();
catch(FileNotFoundException e)
e.printStackTrace();
catch(java.io.IOException ex)
ex.printStackTrace();
  在上面的程序中,byte[] bytes=new byte[1024000]表示要传输的图像内容小于1M,你可以根据具体情况设置,ImageServiceSoapBindingImpl.class.getResourceAsStream(in0)是获得图像文件的输入流,in0是文件名,如test.jpg。这个程序中最关键的部分是:
  new sun.misc.BASE64Encoder().encode(bytes);
  它把byte[]编码成目标String。
  下面的工作就是编译这些代码,然后部署。您可以使用下面的方式进行部署:
  java org.apache.axis.client.AdminClient deploy.wsdd
  使用这中方式部署时,需要保证Apache axis引擎处于运行状态。如果这个方式部署不成功,也可以直接把编译好的代码拷贝到目标应用中,如:
  %TOMCAT_HOME%/webapps/axis/WEB-INF/classes/
  接下来编辑%TOMCAT_HOME%/webapps/axis/WEB-INF/server-config.wsdd文件,在某个&&/service$>$后加入以下内容:
  例程4 手工部署JAX-RPC应用
  &service name=&ImageService& provider=&java:RPC&&
&parameter name=&allowedMethods& value=&*&/&
&parameter name=&wsdlPortType& value=&ImageServiceInterface&/&
&parameter name=&wsdlServicePort& value=&ImageService&/&
&parameter name=&className& value=&com.hellking.webservice.ImageServiceSoapBindingSkeleton&/&
&parameter name=&scope& value=&Session&/&
&parameter name=&wsdlTargetNamespace& value=&urn:ImageService&/&
&parameter name=&wsdlServiceElement& value=&ImageServiceInterfaceService&/&
&/service&
  然后重新启动Apache axis引擎。可以使用下面的方法在浏览器里验证ImageService是否已经成功部署:
  http://localhost:8080/axis/services/ImageService wsdl&method=getImage&name=test.jpg
  这个地址您需要根据具体的情况更改。
  如果成功部署,将在浏览器里返回以下的内容:
  例程5 调用ImageService返回的消息
  & xml version=&1.0& encoding=&UTF-8&
&soapenv:Envelope xmlns:soapenv=&; xmlns:xsd=&;
xmlns:xsi=&;&
&soapenv:Body&
&getImageResponse soapenv:encodingStyle=&;&
&getImageReturn xsi:type=&xsd:string&&
/9j/4AAQSkZJRgABAgEAYABgAAD/7Q0YUGhvdG9zaG9wIDMuMAA4QklNA+0KUmVzb2x1dGlvbgAA
AAAQAGAAAAABAAEAYAAAAAEAAThCSU0EDRhGWCBHbG9iYWwgTGlnaHRpbmcgQW5nbGUAAAAABAAA
AHg4QklNBBkSRlggR2xvYmFsIEFsdGl0dWRlAAAAAAQAAAAeOEJJTQPzC1ByaW50IEZsYWdzAAAA
CQAAAAAAAAAAAQA4QklNBAoOQ29weXJpZ2h0IEZsYWcAAAAAAQAAOEJJTScQFEphcGFuZXNlIFBy ... AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==
&/getImageReturn&
&/getImageResponse&
&/soapenv:Body& &/soapenv:Envelope&
  注意getImageReturn之间的数据是经过BASE64后的数据,xsi:type=&xsd:string&表示它的数据类型是String。
  下面来看怎么在客户端对SOAP消息进行处理。
  例程6 处理SOAP 经过BASE64编码后的消息
  package com.hellking. import java.awt.*; import javax.swing.ImageI import javax.swing.JF public class GetImageByString extends ImageClient {
public Image getImageFromWebservice()
ImageIcon img=
com.hellking.webservice.ImageServiceI
service = new com.hellking.webservice.ImageServiceInterfaceServiceLocator().getImageService();
String result=service.getImage(&test.jpg&);
byte[] bytes = new sun.misc.BASE64Decoder().decodeBuffer(result);
img = new ImageIcon(bytes);
catch (Exception re) {
re.printStackTrace();
return img.getImage();
public static void main(String[] args)
new GetImageByString();
  解码的方法是编码的逆过程,同样很简单。
  byte[] bytes = new sun.misc.BASE64Decoder().decodeBuffer(result)
  把JAX-RPC调用结果解码成byte[];img = new ImageIcon(bytes)使用解码后的byte[]来构建一个ImageIcon。
  最后看一下GUI程序怎么使用Image结果。
  例程7 在GUI客户端使用BASE64解码后的Image
  package com.hellking. import java.awt.*; import javax.swing.ImageI import javax.swing.JF public abstract class ImageClient extends JFrame {
public ImageClient()
super(&test image transport&);
setSize(800, 600);
setVisible(true);
public abstract Image getImageFromWebservice();
public void paint(Graphics
super.paint(g);
Image img = getImageFromWebservice();
g.drawImage(img,0,0,null);
  ImageClient是客户端GUI程序的框架,前面的GetImageByString继承了它。GetImageByString的目的是获得Image,ImageClient的目的是显示Image。GetImageByString运行的结果如图1所示。
  注意:运行此程序需要保证服务器端有对应的图像文件,比如test.jpg。
  对于不是图像的BLOB数据,您可以通过特定的方式处理,比如保存到文件中。
  例程8 保存结果
  PrintWriter out1=
out1=new PrintWriter(new BufferedWriter(new FileWriter(&re.out&)));
catch(Exception e)
e.printStackTrace();
while(true)
out1.print(bytes[i++]);
catch(Exception e)
e.printStackTrace();
out1.close();
  需要指出的是,不同的BLOB数据,在保存时要对格式进行不同的处理,如果使用上面的方法保存图片,将不能得到正确的结果,需要进行额外的处理。具体的处理方式,已经是本文的题外话了。本案例的详细代码您可以从这里&下载。
  下面我们讨论使用附件的形式在SOAP中传输BLOB数据。
  回页首
  使用附件(Attachment)传输BLOB数据
  在SOAP消息中,允许我们像邮件一样发送附件。附件由另一份文档或者份图像内容组成。一般而言,附件应该采用文本或者二进制数据格式来表示。在英特网上,GIF和JPEG数据格式是图形传输的事实标准。SOAP消息允许带有一个或者多个MIME格式的附件。常用的MIME格式有:
text/html:普通的HTML
text/xml:XML文档
text/plain:普通的文本
image/jpeg:JPEG图像
image/tiff:tiff图像
  下面是一个带有普通文档文本的SOAP消息的一部分。
  例程9 带有附件的SOAP消息
  ------=_Part_2_ Content-Type: text/xml &soap-env:Envelope xmlns:soap-env=&;& &soap-env:Header& &/soap-env:Header& &soap-env:Body& &getImage& &test&getImagebyAttachment_Test&/test& &/getImage& &/soap-env:Body& &/soap-env:Envelope& ------=_Part_2_ Content-Type: text/plain Content-Id: hello hello,this is the soap attachment content! ------=_Part_2_--
  上面的黑体字是具体的附件的内容。它的Content-Type是text/plain,id是hello。
  SAAJ(SOAP with Attachments API for Java)为发送带附件的SOAP消息提供了编程接口。在编程中,我们使用SOAPMessage对象来创建AttachmentPart(SOAP 附件)对象,如下:
  AttachmentPart attachment = soapMessage.createAttachmentPart();
  每个AttachmentPart对象有一个或者多个headers和它相关联。Content-Type是Header中必须的元素,其它的元素如:Content-Id,Content-Location是Header中可选的元素。如果要创建一个简单的文本附件,可以使用下面的方式。
  例程10创建一个简单的带文本的SOAP附件
  String stringContent = & hello,this is the soap attachment content!&; attachment.setContent(stringContent, &text/plain&); attachment.setContentId(&test_content&); soapMessage.addAttachmentPart(attachment);
  上面创建的附件的MIME类型是text/plain。如果要创建一个图形的MIME附件,可以使用下面的方法。
  例程11 创建一个图形的MIME附件
  AttachmentPart attachment = soapMessage.createAttachmentPart() byte[] bytes=new byte[1024000]; InputStream in=GetImageByAttachment.class.getResourceAsStream(&test.jpg&); in.read(bytes); ByteArrayInputStream stream = new ByteArrayInputStream(bytes); attachment.setContent(stream, &image/jpeg&); attachment.setContentId(&test_content&); soapMessage.addAttachmentPart(attachment);
  也许你觉得这样创建图形附件比较麻烦,下面有一种相对容易的创建方法。
  例程12另一个创建一个图形的MIME附件的方法
  URL url = new URL(&;); DataHandler dh = new DataHandler(url); AttachmentPart attachment2 = message.createAttachmentPart(dh); attachment2.setContentId(&myImage&); soapMessage.addAttachmentPart(attachment2);
  这里使用了DataHandler对象,它是JavaBean Activation Framework (JAF)的一部分,使用它来创建SOAP附件相对直接,首先创建一个URL,这个URL表示了图像文件存储的位置,然后使用这个URL来创建一个DataHandler对象,接下来就使用这个DataHandler来创建SOAP附件了。
  接下来我们来编写一个具体的例子飧隼雍颓懊娴睦右谎彩窃赟OAP消息中传输一个图像文件,不同的是使用附件的方式。
  这里的附件端采用了JAXM Servlet,关于JAXM编程的请参考此系列文章的第一篇(用JAXM开发Web服务)。服务端的代码如下:
  例程13 SOAP消息发送服务端
  package com.hellking. import org.apache.soap.util.mime.*; import java.net.*; import java.util.*; import java.io.*; import javax.servlet.*; import javax.servlet.http.*; import javax.xml.soap.*; import javax.activation.*; import javassaging.*; import javax.xml.transform.stream.StreamS public class GetImageByAttachment
extends JAXMServlet
implements ReqRespListener {
public SOAPMessage onMessage
(SOAPMessage message)
message.writeTo(System.out);
//以下部分创建SOAP消息
SOAPConnectionFactory soapConnectionFactory =
javax.xml.soap.SOAPConnectionFactory.newInstance();
SOAPConnection soapConnection =
soapConnectionFactory.createConnection();
MessageFactory messageFactory =
MessageFactory.newInstance();
SOAPMessage soapMessage =
messageFactory.createMessage();
SOAPPart soapPart = soapMessage.getSOAPPart();
SOAPEnvelope requestEnvelope =
soapPart.getEnvelope();
SOAPBody body = requestEnvelope.getBody();
SOAPBodyElement operation = body.addBodyElement
(requestEnvelope.createName(&image&));
//创建附件
URL url = new URL(&;);//图像文件的储存的位置
DataHandler dh = new DataHandler(url);
AttachmentPart attachment2 = message.createAttachmentPart(dh);
attachment2.setContentId(&myImage&);//使用JAF来创建SOAP mime附件
soapMessage.addAttachmentPart(attachment2);
soapMessage.writeTo(System.out);
soapMessage.saveChanges();
return soapM
catch(Exception ex)
ex.printStackTrace();
  当然,除了使用DataHandler来创建SOAP消息外,还可以按照前面介绍的使用基本的IO的方式来创建。
  下面来看客户端的代码。如例程14所示。
  package com.hellking. import javax.xml.soap.*; import java.io.*; import java.awt.image.*; import java.awt.*; import codec.jpeg.*;
import javax.swing.JF public class GetImageByAttachmentClient extends ImageClient {
String endPointURLString =
&http://localhost:8080/axis/servlet/GetImageByAttachment&;
public static void main(String[] args)throws Exception
new GetImageByAttachmentClient();
public Image getImageFromWebservice()
//创建SOAP消息
SOAPConnectionFactory soapConnectionFactory =
javax.xml.soap.SOAPConnectionFactory.newInstance();
SOAPConnection soapConnection =
soapConnectionFactory.createConnection();
MessageFactory messageFactory =
MessageFactory.newInstance();
SOAPMessage soapMessage =
messageFactory.createMessage();
SOAPPart soapPart = soapMessage.getSOAPPart();
SOAPEnvelope requestEnvelope =
soapPart.getEnvelope();
SOAPBody body = requestEnvelope.getBody();
SOAPBodyElement operation = body.addBodyElement
(requestEnvelope.createName(&getImage&));
javax.xml.soap.SOAPElement element =
operation.addChildElement(requestEnvelope.createName(&test&));
operation.addChildElement(&testgetImage&).addTextNode(&getImagebyAttachment_Test&);
soapMessage.writeTo(System.out);
//使用JAXM进行调用
javax.xml.soap.SOAPMessage returnedSOAPMessage =
soapConnection.call(soapMessage, endPointURLString);
System.out.println(&========&);
returnedSOAPMessage.writeTo(System.out);//打印返回的SOAP消息
System.out.println(&========&);
java.util.Iterator it = returnedSOAPMessage.getAttachments();
BufferedImage image=
//获得附件,逐个对附件进行处理 while (it.hasNext()) {
AttachmentPart
attachment = (AttachmentPart)it.next();
printAttachmentInfo(attachment);
image= decodeImage(attachment.getDataHandler().getInputStream());
catch(Exception e)
e.printStackTrace();
//把附件解码成Image
public BufferedImage decodeImage(java.io.InputStream in)throws java.io.IOException
BufferedImage image=
image = new BufferedImage(600,800, BufferedImage.TYPE_INT_RGB);
codec.jpeg.JPEGImageDecoder dencoder = JPEGCodec.createJPEGDecoder(in);
image=dencoder.decodeAsBufferedImage();
//打印附件的一些信息
private void printAttachmentInfo( AttachmentPart attachment)throws Exception
Object content = attachment.getContent();
System.out.println(&ContentLocation=&+attachment.getContentLocation());
System.out.println(&Contentsize=&+attachment.getSize());
System.out.println(&ContentType=&+attachment.getContentType());
String id = attachment.getContentId();
System.out.print(&Attachment & + id + & contains: & +content);
  (对于上面这段程序,请原谅我使用了一个特别庞大的getImageFromWebservice方法,并且使用了一个超级长的try{}语句,因为我实在没有时间来把它写得漂亮一点了^_^)
  客户端的执行过程是这样的:
创建SOAP消息
发送SOAP消息
获得返回结果
从返回的SOAP消息中获得Attachment
对Attachment进行处理
  由于一个SOAP消息中可能有多个附件,那么returnedSOAPMessage.getAttachments()方法获得的可能是一个Iterator,所以要遍历这个Iterator对SOAP消息的附件进行处理。attachment.getDataHandler().getInputStream()获得了附件的输入流,DecodeImage是从这个输入流进行获得输入,然后把它们解码成Image。这里的解码方式和BASE64解码方式稍有不同,BASE64解码方式是把String类型的对象解码成byte[],具体我们使用了sun.misc.BASE64Decoder类的decodeBuffer方法;这里的解码是把一个输入流中的数据解码成BufferedImage。
  当然,这里举例的是图像的处理,如果是别的格式数据,您同样可以进行其它的处理。由于篇幅的限制,在这里就不在赘述了。 你同样可以运行GetImageByAttachmentClient来测试运行的效果。需要指出的是,使用这种方式来传输图像时效率比前一种方法好,响应速度(启动客户端到在客户端打印出图像的时间)大概是使用BASE64编码速度的一倍(我的机器环境是:WinXP,AMD Athlon XP 16000+,512M内存,Tomcat 4.03),您可以在您的机器上测试,如果您的测试结果比我的相差很多,您可以通过email告诉我,到时我们可以深入讨论这个效率问题。
  运行代码说明:
  运行前,需要安装JWSDP1.1,您可以从下载。然后把代码(axis目录)拷贝到%JWSDP_HOME%/webapps/目录下,启动Tomcat即可。主程序在axis/WEB-INF/classes/目录下,分别是GetImageByString.java和GetImageByAttachmentClient.java。
本问题标题:
本问题地址:
温馨提示:本问题已经关闭,不能解答。
暂无合适的专家
&&&&&&&&&&&&&&&
希赛网 版权所有 & &&&&增值电信业务经营许可证湘B2-}

我要回帖

更多关于 imageicon 缩放 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信