import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.ObjectInputStream;import org.eclipse.core.runtime.FileLocator;
import org.eclipse.core.runtime.Platform;import com.hwsy.db.sqlcon;
import com.hwsy.fssr.zsdw.sys.IAppConstants;
import com.runqian.report4.model.ReportDefine;
import com.runqian.report4.model.engine.ExtCellSet;
import com.runqian.report4.usermodel.Context;
import com.runqian.report4.usermodel.DataSourceConfig;
import com.runqian.report4.usermodel.Engine;
import com.runqian.report4.usermodel.IReport;
import com.runqian.report4.util.ReportUtils;
import com.runqian.report4.view.html.HtmlReport;public class PrintUtils {

private static sqlcon query = null;

public static void main(String[] args) {
System.out.println(getHtml());
}

public static String getHtml(){
String html = "";
String filePath = null;
String licenseFile="D:/PCPProject/com.hwsy.fssr.zsdw/reportFiles/defaultlicense.lic";
try {
filePath = FileLocator.toFileURL(
Platform.getBundle(IAppConstants.APPLICATION_ID)
.getEntry("")).getPath().toString()
+ "reportFiles/test.raq";
System.out.println("filePath="+filePath);
FileInputStream  is = new  FileInputStream(filePath);
ObjectInputStream ois = new ObjectInputStream( is );//此处出错 
//第一步 读取报表模板 //ReportDefine rd = (ReportDefine)ReportUtils.read("D:/PCPProject/com.hwsy.fssr.zsdw/reportFiles/test.raq");
ReportDefine rd =(ReportDefine)ois.readObject();
ois.close();
is.close();
//第二步 设置报表授权文件 设置数据源工厂类 运算报表
ExtCellSet.setLicenseFileName(licenseFile);
Context context = new Context();
context.setDefDataSourceName("defaultDS"); 
context.setConnection("defaultDS",query.getConn()); 
DataSourceConfig dsoc = new DataSourceConfig(2, true, "GBK", "GBK", false); 
context.setDataSourceConfig("defaultDS", dsoc);
//设置参数
context.setParamValue("arg1" ,"12");
//计算
Engine engine = new Engine(rd,context); 
IReport iReport = engine.calc();
//生成字符串
HtmlReport htmlReport = new HtmlReport(iReport,"reportDS.htm"); 
html = htmlReport.generateHtml(); 
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}   ;

System.out.println(html);
return html;
}}
具体异常如下filePath=/D:/PCPProject/com.hwsy.fssr.zsdw/reportFiles/test.raq
java.io.StreamCorruptedException: invalid stream header: 52515152
at java.io.ObjectInputStream.readStreamHeader(Unknown Source)
at java.io.ObjectInputStream.<init>(Unknown Source)
at com.hwsy.fssr.zsdw.print.PrintUtils.getHtml(PrintUtils.java:46)
debug到这里
ObjectInputStream ois = new ObjectInputStream( is );//此处出错 
跳出异常
用快逸的方法直接读则没有任何异常信息
//ReportDefine rd = (ReportDefine)ReportUtils.read("D:/PCPProject/com.hwsy.fssr.zsdw/reportFiles/test.raq");
但是也是到这里跳出。。估计异常他们给扑捉啦没打印到控制台。找了很多帖子。好像有人说jdk换1.5就可以啦。。但是我换成1.5后我本身的rcp应用程序起不来
大家帮我看看在1.6下这个异常怎么搞定哈。谢谢先分不够再加哈。。

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【yougucao379548695】截止到2008-07-10 15:38:26的历史汇总数据(不包括此帖):
    发帖的总数量:32                       发帖的总分数:1480                     每贴平均分数:46                       
    回帖的总数量:478                      得分贴总数量:173                      回帖的得分率:36%                      
    结贴的总数量:31                       结贴的总分数:1380                     
    无满意结贴数:1                        无满意结贴分:50                       
    未结的帖子数:1                        未结的总分数:100                      
    结贴的百分比:96.88 %               结分的百分比:93.24 %                  
    无满意结贴率:3.23  %               无满意结分率:3.62  %                  
    值得尊敬
      

  2.   

    帮不上你   不会你上网查查那个StreamCorruptedException吧
      

  3.   

    你向java2000提问撒,java2000会帮你解决的...
      

  4.   

    你不会是在开发Eclipse的插件吧
      

  5.   

    quiee最新的版本已经不支持ObjectInputStream 可以这样:
    InputStream is=new FileInputStream(filePath);
    ReportDefine rd=(ReportDefine)ReportUtils.read(is);
    也可以直接读取报表模板:
    ReportDefine rd=(ReportDefine)ReportUtils.read(filePath);
      

  6.   

    我查了一下资料。发现你这个问题还挺普遍的。就是在写对象到一个文件的时候对象流会在头上加东西。反复写的话就会出现你开始说的那个错误提示。
    解决的方法也很简单,就是在对象序列化的时候覆盖对象流中的writeStreamHeader方法,让他什么也不做。类似下面的样子: ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(file)) {
    @Override
    protected void writeStreamHeader() throws IOException {
    }
    };