Как я передаю вывод консоли Java по каналу в файл?

Как говорили другие, первая версия, используя «this», приводит к каждому экземпляру класса A, имеющему собственную независимую копию метода функции «x». Принимая во внимание, что использование «прототипа» будет означать, что каждый экземпляр класса A будет использовать одну и ту же копию метода «x».

Вот некоторый код, чтобы показать эту тонкую разницу:

// x is a method assigned to the object using "this"
var A = function () {
    this.x = function () { alert('A'); };
};
A.prototype.updateX = function( value ) {
    this.x = function() { alert( value ); }
};

var a1 = new A();
var a2 = new A();
a1.x();  // Displays 'A'
a2.x();  // Also displays 'A'
a1.updateX('Z');
a1.x();  // Displays 'Z'
a2.x();  // Still displays 'A'

// Here x is a method assigned to the object using "prototype"
var B = function () { };
B.prototype.x = function () { alert('B'); };

B.prototype.updateX = function( value ) {
    B.prototype.x = function() { alert( value ); }
}

var b1 = new B();
var b2 = new B();
b1.x();  // Displays 'B'
b2.x();  // Also displays 'B'
b1.updateX('Y');
b1.x();  // Displays 'Y'
b2.x();  // Also displays 'Y' because by using prototype we have changed it for all instances

Как отмечали другие, существуют разные причины выбора одного или другого метода. Мой образец просто предназначен, чтобы четко продемонстрировать разницу.

18
задан Eric Petroelje 9 March 2009 в 15:07
поделиться

3 ответа

На самом деле можно активироваться трассировка в Панели управления Java. Это передаст по каналу что-либо, что заканчивается в консоли Java в файле трассировки.

файлы журнала закончатся в:

  • < пользователь home>/.java/deployment/log на Unix/Linux
  • < Данные Пользовательского приложения Folder> \Sun\Java\Deployment\log в Windows
  • / ~/Library/Caches/Java/log на OS X
23
ответ дан 30 November 2019 в 06:46
поделиться

(Если можно изменить код), можно установить System.out поле к другому значению:

System.setOut(new PrintStream(new FileOutputStream(fileName)));

при выполнении сценария (вызывающий программу через java) от Unix, Вы могли сделать:

/path/to/script.sh >& path/to/output.log
12
ответ дан 30 November 2019 в 06:46
поделиться

Замороженная консоль, вероятно, означает мертвую блокировку (это могло также означать повторенный бросок исключения). Можно получить дамп стека с помощью jstack. jps может сделать нахождение процесса легче.

2
ответ дан 30 November 2019 в 06:46
поделиться
Другие вопросы по тегам:

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