Я хочу загрузить метаданные из файла MP3 для воспроизведения с помощью JavaFx MediaPlayer. Это отлично работает в модульном тесте, но не в приложении. В модульном тесте было сообщено 6 элементов метаданных, но ноль в приложении. Метод, который «делает работу», тот же.
Основной класс приложения расширяет Application. Тестовый класс расширяет 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.
Media
загружаются лениво, что означает, что они могут быть доступны не сразу. Вы можете просматривать метаданные, чтобы получать уведомления, когда становятся известны определенные атрибуты. - person Slaw   schedule 10.10.2019