Где действительно Подключается с консоли. WriteLine входят в Отладку?

Многие объяснения уже присутствуют, чтобы объяснить, как это происходит и как это исправить, но вы также должны следовать рекомендациям, чтобы избежать NullPointerException вообще.

См. также: A хороший список лучших практик

Я бы добавил, очень важно, хорошо использовать модификатор final. Использование "окончательной" модификатор, когда это применимо в Java

Сводка:

  1. Используйте модификатор final для обеспечения хорошей инициализации.
  2. Избегайте возврата null в методы, например, при возврате пустых коллекций.
  3. Использовать аннотации @NotNull и @Nullable
  4. Быстрое завершение работы и использование утверждений, чтобы избежать распространения нулевых объектов через все приложение, когда они не должен быть пустым.
  5. Сначала используйте значения с известным объектом: if("knownObject".equals(unknownObject)
  6. Предпочитают valueOf() поверх toString ().
  7. Используйте null safe StringUtils StringUtils.isEmpty(null).

26
задан Community 23 May 2017 в 12:09
поделиться

5 ответов

Отладка и Выпуск не управляют, получаете ли Вы консоль. Этим управляет выходной тип проекта. (Свойства-> Приложение-> Выходной Тип). Консольное приложение получит Вас консоль, которая будет визуализировать и получать вход от окна в Ошибку, В, и потоки в Системе. Консоль.

Система. Консольный класс представляет несколько свойств и методов для взаимодействия с его потоками, даже если Вы не видите его. Прежде всего: Ошибка, В, SetError (), SetIn (), SetOut (), и Чтение и Методы записи.

3
ответ дан Samuel 28 November 2019 в 07:50
поделиться

Это переходит к консоли (стандартный вывод) или к потоку, на который установлена консоль.

0
ответ дан chills42 28 November 2019 в 07:50
поделиться

Даже в приложении WinForms, можно создать консоль, но необходимо будет пройти P/Invoke для вызова метода Win32 непосредственно. См. http://pinvoke.net/default.aspx/kernel32/AllocConsole.html

-1
ответ дан James Curran 28 November 2019 в 07:50
поделиться

Console.writeline () переходит к консоли: черная команда / подсказка DOS.

-4
ответ дан Joel Coehoorn 28 November 2019 в 07:50
поделиться

Nullstream , который определяется как «поток без хранилища». Все методы ничего не делают или ничего не возвращают. Это внутренний класс по потоку . Следующий код взят из исходного кода Microsoft.

В основном, когда одна из Console Написать методы, вызовут первый раз, вызов сделан в функцию API Windows GetStdhandle для «стандартного вывода». Если ручка не возвращается , создается и используется .

Ответ Самуила является правильным и предоставляет общую информацию. На самом деле перенаправить выход консоли, независимо от типа проекта, используйте Console.Setout (новая System.io.streamwriter («C: \ ConsoleOutput.txt»)) , который является простым примером.

направляя консоль, отладку и трассировку в файл

, чтобы ответить на ваш вопрос напрямую. Используйте Consoletracelistener Consoletracelistener и A Streamwriter , чтобы направлять все три выхода в файл. Я использую только для разработки.

    Dim oLogFile As New System.IO.StreamWriter("C:\ConsoleOutput.txt")
    oLogFile.AutoFlush = True 'so we do not have to worry about flushing before application exit

    Console.SetOut(oLogFile)

    'note, writing to debug and trace causes output on console, so you will get double output in log file
    Dim oListener As New ConsoleTraceListener
    Debug.Listeners.Add(oListener)
    Trace.Listeners.Add(oListener)

Nullstream

[Serializable]
private sealed class NullStream : Stream {
    internal NullStream() { }

    public override bool CanRead {
        get { return true; }
    }

    public override bool CanWrite {
        get { return true; }
    }

    public override bool CanSeek {
        get { return true; }
    }

    public override long Length {
        get { return 0; }
    }

    public override long Position {
        get { return 0; }
        set { }
    }

    // No need to override Close

    public override void Flush() {
    }

    public override int Read([In, Out] byte[] buffer, int offset, int count) {
        return 0;
    }

    public override int ReadByte() {
        return -1;
    }

    public override void Write(byte[] buffer, int offset, int count) {
    }

    public override void WriteByte(byte value) {
    }

    public override long Seek(long offset, SeekOrigin origin) {
        return 0;
    }

    public override void SetLength(long length) {
    }
} 
10
ответ дан 28 November 2019 в 07:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: