有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

如何将JAVA logger打印输出显示到C#控制台

我试图显示从JAVA控制台到C#的命令提示符中打印出来的信息。当系统启动时,它工作正常。出来println是用JAVA发布的,但是它不适用于记录器。信息打印出来

注意:当我通过windows命令提示符(CMD>;java-jartestbed.jar)运行它时,记录器信息会在命令提示符中打印出来

感谢任何人在这方面的投入和帮助。我正在使用的测试代码如下所示:

JAVA来做一个简单的递增和递减数字,并在按下递增或递减按钮时通过记录器打印出来。(此代码无法更改)

private static int ValueInteger = 0 ;
static Logger l;

public TestBed() {
        initComponents();
        try{
            l = Logger.getLogger("");
            FileHandler fh = new FileHandler("main.log", false);
            l.addHandler(fh);
            l.setLevel(Level.ALL);
            l.fine("Logger Created - JTSRunner.main()");
        }catch(Exception ex){}
    }
 private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        // TODO add your handling code here:
        ValueInteger--;         
//        System.out.println(Integer.toString(ValueInteger));
        l.info(Integer.toString(ValueInteger));
    } 

 private void jButton4ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        // TODO add your handling code here:
        ValueInteger++; 
//        System.out.println(Integer.toString(ValueInteger));
        l.info(Integer.toString(ValueInteger));
    }

处理并打印到文本框中的C代码(我正在处理的代码):

private void Button_Click(object sender, RoutedEventArgs e)
    {

        ProcessStartInfo startInfo = new ProcessStartInfo("cmd", "/k java -jar Testbed.jar ")
        {
            WorkingDirectory = "C:\\Testbed",
            WindowStyle = ProcessWindowStyle.Hidden,
            UseShellExecute = false,
            RedirectStandardOutput = true,
            CreateNoWindow = true
        };

        Process process = Process.Start(startInfo);
        process.OutputDataReceived += writeCommandInfo;
        process.BeginOutputReadLine();           
        //process.WaitForExit();
    }

    private void writeCommandInfo(object sender, DataReceivedEventArgs e)
    {
        if (e.Data != null)
        {
            this.Text.Dispatcher.Invoke(new Action(() => this.Text.Text = e.Data.ToString()), DispatcherPriority.Normal, null);
        }
    }

共 (1) 个答案

  1. # 1 楼答案

    默认的java.util.logging属性文件配置ConsoleHandler,它将消息记录到System.errsource),这就是消息出现在命令提示符中的原因。但是,由于您的C#代码只重定向标准输出,而不是标准错误(RedirectStandardError),因此进程无法捕获消息

    尝试将RedirectStandardError属性设置为true