Я хочу загрузить метаданные из файла MP3, который будет воспроизводиться проигрывателем JavaFx MediaPlayer. Это прекрасно работает в модульном тесте, но не в приложении. В модульном тесте сообщалось о 6 элементах метаданных, но в приложении - ноль. Метод, который "делает работу", тот же.
Основной класс приложения расширяет приложение. Тестовый класс расширяет ApplicationTest от TestFx. Может ли это повлиять на поведение?
Приложение:
public class MediaMain extends Application {
@Override
public void start(Stage primaryStage) throws Exception {
Map<String, Object> meta = metaData();
System.out.printf("Number of meta data: %d.%n", meta.size());
System.out.println(meta);
}
Map<String, Object> metaData() {
File audioFile = new File("src/main/resources", "beingBoiled.mp3");
final URI uri = audioFile.toURI();
final String source = uri.toString();
Media media = new Media(source);
new MediaPlayer(media);
return media.getMetadata();
}
}
Модульный тест:
class MediaMainTest extends ApplicationTest {
@Test
void testMeta() {
MediaMain main = new MediaMain();
Map<String, Object> metaData = main.metaData();
assertNotEquals(0, metaData.size());
System.out.printf("Number of meta data: %d.%n", metaData.size());
System.out.println(metaData);
}
}
Распечатка из приложения:
Number of meta data: 0.
{}
Распечатка из модульного теста:
Number of meta data: 6.
{year=1980, artist=The Human League, raw metadata={ID3=java.nio.HeapByteBufferR[pos=254 lim=3214 cap=3214]}, album=Travelogue, genre=(52), title=Being Boiled}
В чем может быть причина? Это для меня загадка. Написан на Java 11, JavaFx 11.0.2 и TestFx 4.0.15-alpha.