第一次申请
Swing客户端: 此客户端将A URI作为输入。并且提供的URI是Web服务的URL。提交时,客户端使用URI作为参数执行WebService Client。
执行webservice客户端
String command = "java -jar EncryptToken.jar " + requestURI;
Runtime.getRuntime().exec(command);
由于jar是由客户端提供的,除了接受requestURI的main方法之外没有公共方法。
第二次申请
WebService客户端:这是用于调用服务器中托管的Web服务的Web服务客户端。
在反编译代码中,我找到了以下用于将控制台输出记录到记录器文件中的代码。
OutputStream outStream = System.out;
try{
OutputStream os = new FileOutputStream("EncryptToken.log", false); // only the file output stream
TeeOutputStream tos = new TeeOutputStream(outStream, os); // create a TeeOutputStream that duplicates data to outStream and os
PrintStream fileStream = new PrintStream(tos);
System.setErr(fileStream);
System.setOut(fileStream);
}catch(FileNotFoundException ex){
out.println("[Golden Client] Log file create Exception = " + ex.toString());
return false;
}
问题
当我通过终端或windows命令行执行命令java -jar EncryptToken.jar http://example.org/GCWS/YesWS时。
命令执行成功,控制台输出写入文件,文件大小在70-90 KB之间。
但是,当我尝试使用Swing Client执行相同操作时,执行Command但是日志文件首先用1KB初始化,然后它变为5KB然后冻结。 5 KB日志包含未终止的xml。当我关闭swing客户端时,控制台输出的其余部分将附加到日志文件中。
我没有在Swing Client中读取或写入文件。 Swing Client中没有System.out或System.err语句。
我无法弄清楚exect的根本原因。请帮忙。
答案 0 :(得分:0)
确保关闭所有输出流和文件。
这些流用作缓冲区。如果你写它们并没有真正写入磁盘,除非:
当JVM停止时,它会尝试关闭所有内容,这就是它在命令行中运行的原因。从swing应用程序启动时,JVM不会停止,直到你停止swing应用程序,因此似乎文件的某些部分没有写入磁盘。