Java 打印到错误屏幕的奇怪输出(System.err)
为了测试,我在主程序中运行了三个线程。一切都很好,它做了它应该做的 然而,我注意到在控制台上我得到了以下输出(红色): 当我的主程序继续运行时,程序不断地打印这些连续的行。有人能向我解释一下这是什么意思,以及它是否会影响我的课程吗 编辑:这是到目前为止我的代码。一个线程每秒生成一个文件,另一个线程具有读取该文件然后删除该文件的函数,最后一个线程持续请求用户输入,并根据该输入执行一个函数:Java 打印到错误屏幕的奇怪输出(System.err),java,eclipse,Java,Eclipse,为了测试,我在主程序中运行了三个线程。一切都很好,它做了它应该做的 然而,我注意到在控制台上我得到了以下输出(红色): 当我的主程序继续运行时,程序不断地打印这些连续的行。有人能向我解释一下这是什么意思,以及它是否会影响我的课程吗 编辑:这是到目前为止我的代码。一个线程每秒生成一个文件,另一个线程具有读取该文件然后删除该文件的函数,最后一个线程持续请求用户输入,并根据该输入执行一个函数: static PredictiveModelDemo pmDemo; public sta
static PredictiveModelDemo pmDemo;
public static void main(String[] args) {
// TODO Auto-generated method stub
pmDemo = new PredictiveModelDemo();
new Thread(new generateFiles()).start();
new Thread(new feedModel()).start();
new Thread(new makePrediction()).start();
}
static class generateFiles implements Runnable {
@Override
public void run() {
// TODO Auto-generated method stub
File file = new File("C:\\Users\\ZK0GJXO\\Documents\\NoOfTrades.txt");
int i = 1;
while(true){
try {
if(!file.exists()){
PrintWriter writer = new PrintWriter("C:\\Users\\ZK0GJXO\\Documents\\NoOfTrades.txt");
writer.print(i * 15);
writer.close();
i++;
}
else{
i++;
Thread.sleep(1000);
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
static class feedModel implements Runnable {
@Override
public void run() {
// TODO Auto-generated method stub
pmDemo.feedModel();
}
}
static class makePrediction implements Runnable {
@Override
public void run() {
// TODO Auto-generated method stub
System.out.println("Enter P to make a prediction: ");
Scanner in = new Scanner(System.in);
String response = in.next();
while(true){
if(response.toUpperCase().equals("P")){
pmDemo.makePrediction();
response = "";
System.out.println("Enter P to make a prediction: ");
response = in.next();
}
}
}
}
红色输出为标准输出。它可能是您正在使用的某个库的日志输出,无论
PredictiveModelDemo
来自何处
您是否使用任何日志库,如JUL或log4j?如果是,并且库正确使用了java的日志框架,则可以过滤掉不感兴趣的日志行
库也可能直接调用System.err.println
,但强烈建议不要这样做。如果是这样,你对此无能为力
无论哪种方式,它都不会影响您的程序。您是否有每3行写一次控制台日志?这就是它看起来的样子。。如果soIt这样做是因为你在那行写了什么,它不会影响你的程序。不,不是那一行,是前一行。(如果不显示代码,很难说为什么代码会执行某些操作…)我使用的是ApacheSpark2.1,这个库使用的是log4j。我知道我的程序不会受到任何影响,但看到这些消息很烦人,让我的测试很难理解。不管怎样,我怎样才能摆脱他们?我以前使用过这个库,以前从未将此输出打印到控制台。这一切都是从我开始使用多个线程开始的,所以我通过使用以下命令来摆脱它们:
System.err.close()代码>
static PredictiveModelDemo pmDemo;
public static void main(String[] args) {
// TODO Auto-generated method stub
pmDemo = new PredictiveModelDemo();
new Thread(new generateFiles()).start();
new Thread(new feedModel()).start();
new Thread(new makePrediction()).start();
}
static class generateFiles implements Runnable {
@Override
public void run() {
// TODO Auto-generated method stub
File file = new File("C:\\Users\\ZK0GJXO\\Documents\\NoOfTrades.txt");
int i = 1;
while(true){
try {
if(!file.exists()){
PrintWriter writer = new PrintWriter("C:\\Users\\ZK0GJXO\\Documents\\NoOfTrades.txt");
writer.print(i * 15);
writer.close();
i++;
}
else{
i++;
Thread.sleep(1000);
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
static class feedModel implements Runnable {
@Override
public void run() {
// TODO Auto-generated method stub
pmDemo.feedModel();
}
}
static class makePrediction implements Runnable {
@Override
public void run() {
// TODO Auto-generated method stub
System.out.println("Enter P to make a prediction: ");
Scanner in = new Scanner(System.in);
String response = in.next();
while(true){
if(response.toUpperCase().equals("P")){
pmDemo.makePrediction();
response = "";
System.out.println("Enter P to make a prediction: ");
response = in.next();
}
}
}
}