java 重定向out_Java System.out重定向问题

我编写了一个递归目录搜索,对于匹配某个模式的每个目录,它将执行.bat . 现在我想将打印到java控制台的消息(不需要编写standardErr)重定向到JTextArea . 以下代码用于GUI的重定向部分 .

taConsole = new JTextArea();

taConsole.setEditable(false);

PrintStream printStream = new PrintStream(new CustomOutputStream(taConsole));

JScrollPane consolePane= new JScrollPane(taConsole);

System.setOut(printStream);

递归搜索和进程执行是可以的,但是当我尝试用GUI执行时,没有任何内容写在textarea上 . 当我将一些System.out.println(“foobar”)插入GUI类时,消息按预期打印到文本区域 . 但是,我的逻辑类上的打印件没有插入到textarea中 .

程序在执行bat之前和之后打印一条消息,如下所示:

System.out.println("Generating PDFs for"+grandparent+"\\"+parent+"\\ ..."+f.getName());

Process p = Runtime.getRuntime().exec("cmd /c start /wait .\\Run.bat \""+f.getParent()+"\"");

p.waitFor();

System.out.println("PDFs generated!");

(不是那么)有趣的是,当我从命令行中删除“start”语句时,消息将按照我的意愿打印在textarea中,但不会执行该过程 . 使用start语句,程序会正常执行并生成我的pdfs,但根本不会向文本区域打印任何消息 .

我在这里想念的是什么?

提前致谢 .

解决了:

实际问题是swing GUI的主线程被阻塞等待递归搜索(和PDF生成)结束,因此框架没有被刷新 . 通过在逻辑类上实现Runnable并通过GUI中的新线程调用它来解决 .

好的,我知道你的问题了。关于Java实现响应重定向并发送POST请求的操作示例,可以参考以下代码: ```java import java.net.HttpURLConnection; import java.net.URL; import java.io.OutputStream; import java.io.BufferedReader; import java.io.InputStreamReader; public class RedirectAndPost { public static void main(String[] args) throws Exception { String url = "http://www.example.com/redirect"; String postBody = "param1=value1&param2=value2"; HttpURLConnection connection = null; URL redirectUrl = new URL(url); while (true) { connection = (HttpURLConnection) redirectUrl.openConnection(); connection.setInstanceFollowRedirects(false); connection.setRequestMethod("POST"); connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); connection.setRequestProperty("charset", "utf-8"); connection.setRequestProperty("Content-Length", Integer.toString(postBody.getBytes().length)); connection.setUseCaches(false); connection.setDoOutput(true); OutputStream outputStream = connection.getOutputStream(); outputStream.write(postBody.getBytes("UTF-8")); outputStream.flush(); outputStream.close(); int statusCode = connection.getResponseCode(); if (statusCode == HttpURLConnection.HTTP_MOVED_TEMP || statusCode == HttpURLConnection.HTTP_MOVED_PERM || statusCode == HttpURLConnection.HTTP_SEE_OTHER) { String redirectLocation = connection.getHeaderField("Location"); redirectUrl = new URL(redirectLocation); continue; } else { BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8")); String line = null; StringBuilder responseBuilder = new StringBuilder(); while ((line = reader.readLine()) != null) { responseBuilder.append(line); } reader.close(); String response = responseBuilder.toString(); System.out.println(response); break; } } } } ``` 这个示例代码实现了向一个URL发送POST请求,并在接收到重定向响应时自动跟随重定向并重新发送POST请求。注意,我们在第一次请求时将`setInstanceFollowRedirects`方法设置为`false`,以便我们能够手动处理重定向响应。当我们接收到重定向响应时,从响应头中获取重定向URL,并将其存储在`redirectUrl`变量中,然后继续重新发送POST请求,直到我们接收到最终响应为止。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值