JavaFX:创建媒体对象会导致java.lang.reflect.InvocationTargetException错误

问题描述

我目前正在开发一个简单的游戏,并且尝试使用JavaFX实现声音,并且在创建Media对象时收到java.lang.reflect.InvocationTargetException错误。 我尝试过:

app.get('/api/buckets',(req,res) => { console.log("LOGS"); console.log(req.query.bucket_name); console.log(req.query.file_name); if (req.query.bucket_name) { queries.getAllFilesFromSpecificBucket(req.query.bucket_name).then(bucket => { res.json(bucket); }).catch(err => res.json(err)) } else { queries.listofBuckets().then(data => { res.json(data); }).catch(err => res.json(err)) } })

Media media = new Media("file:sounds/test.mp3");

,并且在我的PC上都具有完整的文件路径。

这是我得到的错误

Media media = new Media(new File("file:sound/test.mp3").toURI().toString());

解决方法

错误消息显示NoClassDefFoundError: javafx/scene/media/Media,这表明它没有找到Media类。

解决方案是将vm参数添加到您的项目中。

右键单击项目>运行方式>运行配置...

单击“参数”,然后将以下内容粘贴到vm参数中:

--module-path "/path/to/javafx-sdk/lib" --add-modules javafx.media

根据您的项目,您可能还必须添加javafx.controlsjavafx.fxml

--module-path "/path/to/javafx-sdk/lib" --add-modules javafx.controls,javafx.fxml,javafx.media

/path/to/javafx-sdk/lib替换为系统中lib文件夹的实际路径。