Многие объяснения уже присутствуют, чтобы объяснить, как это происходит и как это исправить, но вы также должны следовать рекомендациям, чтобы избежать NullPointerException
вообще.
См. также: A хороший список лучших практик
Я бы добавил, очень важно, хорошо использовать модификатор final
. Использование "окончательной" модификатор, когда это применимо в Java
Сводка:
final
для обеспечения хорошей инициализации. @NotNull
и @Nullable
if("knownObject".equals(unknownObject)
valueOf()
поверх toString (). StringUtils
StringUtils.isEmpty(null)
. Отладка и Выпуск не управляют, получаете ли Вы консоль. Этим управляет выходной тип проекта. (Свойства-> Приложение-> Выходной Тип). Консольное приложение получит Вас консоль, которая будет визуализировать и получать вход от окна в Ошибку, В, и потоки в Системе. Консоль.
Система. Консольный класс представляет несколько свойств и методов для взаимодействия с его потоками, даже если Вы не видите его. Прежде всего: Ошибка, В, SetError (), SetIn (), SetOut (), и Чтение и Методы записи.
Это переходит к консоли (стандартный вывод) или к потоку, на который установлена консоль.
Даже в приложении WinForms, можно создать консоль, но необходимо будет пройти P/Invoke для вызова метода Win32 непосредственно. См. http://pinvoke.net/default.aspx/kernel32/AllocConsole.html
Console.writeline () переходит к консоли: черная команда / подсказка DOS.
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)
[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) {
}
}