Swing应用程序阻止写入文件



第一个应用程序

Swing客户端:此客户端将URI作为输入。提供的URI是Web服务的URL。提交时,客户端执行以URI为参数的WebService客户端。

用于执行Web服务客户端

String command = "java -jar EncryptToken.jar " + requestURI;
Runtime.getRuntime().exec(command);

由于jar是由客户端提供的,除了接受requestURI的main方法外,没有其他公共方法。

第二次应用

WebService客户端:这是用于调用服务器中托管的WebService的WebService客户端。

在反编译的代码中,我发现了以下用于将控制台输出记录到记录器文件中的代码。

    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;
    }

问题

当我执行命令java-jar EncryptToken.jar时http://example.org/GCWS/YesWS通过终端或windows命令行。

命令执行成功,控制台输出写入文件,文件大小在70-90KB之间变化。

但是,当我尝试用Swing Client执行同样的操作时,命令会被执行,但日志文件首先用1KB初始化,然后变为5KB,然后被冻结。5 KB的日志包含未终止的xml。当我关闭swing客户端时,控制台输出的其余部分将附加到日志文件中。

我没有在Swing Client中读取或写入该文件。Swing Client中没有System.out或System.err语句。

我无法找出高管的根本原因。请帮忙。

确保所有输出流和文件都已关闭。

这些流充当缓冲区。如果你写它们,它并没有真正写入磁盘,除非:

  • 内存中的队列已满(大约有几千字节(
  • 对流调用flush((以强制将其写出
  • 关闭流(这也会强制写出所有挂起的数据(

当JVM停止时,它会尝试关闭所有填充,这就是为什么它似乎在命令行中工作。从swing应用程序启动时,JVM直到停止swing应用才会停止,因此文件的某些部分似乎没有写入磁盘。

相关内容

  • 没有找到相关文章

最新更新