У меня действительно странная проблема, решение которой я не могу найти. У меня есть Java класс, который расширяет поток. Я создаю его экземпляр (из потока ThreadPoolExecutor
) и запускаю start()
. Однако выполнение просто зависает и никогда не возвращается из конструктора, несмотря на то, что его первый оператор не выполняется.
Вот единственный конструктор, объявленный в классе:
public class Recorder extends Thread{
private String channelId;
private RecorderCallback recorderCallback;
public Recorder(String channelId, String workingDirectory, RecorderCallback RecorderCallback){
//super();
try{
System.out.println(getCurrentTimeStamp() + " DEBUG new recorder: " + channelId + " | " + workingDirectory);
this.channelId = channelId;
String timeString = new SimpleDateFormat("dd.MM.yyyy-HHmmss").format(new Date());
this.directory = timeString + "_" + channelId;
new File(workingDirectory + File.separator + directory).mkdirs();
} catch (Exception exception){
System.out.println(getCurrentTimeStamp() + " An unexpected exception occurred: " + exception.getMessage());
exception.printStackTrace();
} finally {
System.out.println(getCurrentTimeStamp() + " DEBUG FINALLY called in CONSTRUCTOR");
}
}
Вот точка, в которой я инициализируйте и запустите новый Recorder
(который НЕ обернут в блок try / catch, а метод, в котором этот код не объявлен, не генерирует никаких исключений):
System.out.println(getCurrentTimeStamp() + " Creating new recorder [" + channelId + "]");
Recorder recorder = new Recorder(channelId, Constants.RECORDING_WORKING_DIR, this);
System.out.println(getCurrentTimeStamp() + " DEBUG Instance created"));
recorder.start();
Когда я запускаю приложение Я получаю этот след:
[timestamp] Creating new recorder [channelname]
Никаких других выходных данных вообще. Я использую OpenJDK 1.8.0_242.
Проблема в том, что печать не обрабатывается? Чего мне не хватает?