Значение интерпретируется как число. Вы можете сравнить параметры времени в атрибуте disabled с помощью строки:
<mat-option [disabled]="time2.toString() === timeSelection1.toString()" *ngFor="
let time2 of resTimePeriodData
" [value]="time2">{{ time2 }}</mat-option>
Я бы порекомендовал использовать только цифры.
getErrorStream не читает поток сообщений об ошибках, он просто получает дескриптор к нему. Поскольку это - канал при никогда фактическом чтении его это заполнится и вынудит программу Perl заблокироваться.
Вам нужно что-то как:
Inputstream errors = getErrorStream();
while (errors.read(buffer) > 0) {
SOP buffer;
}
Идеально, я думаю, что для предотвращения мертвой блокировки в Java необходимо породить отдельные потоки для чтения STDERR и STDOUT. Это кажется, что Perl блокируется при записи в STDERR, потому что по той или иной причине Вы никогда не читаете из него в Java.
Дополнительным фактором для рассмотрения является буферизация, которая происходит при переданных по каналу процессах.
Существует по умолчанию, о буфере с 30 выходами строки, который сохраняется оболочкой, создающей межпроцессный канал, поэтому если приложение Perl не создало достаточно данных, это не будет отправлено в JAVA-приложение все же для обработки.
Может быть этот поток, имеет возможную причину для Вашей проблемы:
Добавьте 3 строки к верхней части сценария Perl:
use IO::Handle;
STDOUT->autoflush(1);
STDERR->autoflush(1);
Проблема в упомянутом потоке была связана со "способом, которым Perl буферизует свой вывод".
Однако здесь, Adrian Pronk упоминает в комментариях, что "Perl зависает, потому что Java никогда не читает свой вывод".
STDOUT->autoflush(1);
STDERR->autoflush(1);
This is the information I needed!
I have a Java app running some Perl scripts and I'd only get the output after it was finished.
By adding the autoflush(1)
I get it right away.
BTW, I do have separate threads for reading STDERR
and STDOUT
, and that's the way to go.
Thanks.