【发布时间】:2019-10-10 18:35:21
【问题描述】:
我想从 MP3 文件加载元数据,以由 JavaFx MediaPlayer 播放。这在单元测试中可以正常工作,但在应用程序中却不行。在单元测试中,报告了 6 项元数据,但在应用程序中为零。 “做事”的方法是一样的。
应用程序的主类扩展了Application。测试类从 TestFx 扩展 ApplicationTest。这会影响行为吗?
应用程序:
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的元数据是延迟加载的,这意味着它可能不会立即可用。您可以观察元数据,以便在某些属性已知时收到通知。