java - java.lang.NoClassDefFoundError 使用 JavaFX 播放来自 jar 的声音
问题描述
我希望能够从我看到推荐使用 JavaFX 的帖子的 mp3 文件中播放声音。我实现了 MediaPlayer 并初始化了 JFXPanel,在 Eclipse 中,一切都很好。
然而,当我导出到可运行的 jar 并尝试运行程序时,我收到以下错误消息:java.lang.NoClassDefFoundError: javafx/scene/media/MediaException。
我认为这是因为在较新的 JRE 版本中排除了 JavaFX(我在寻找解决方案时遇到了这个问题)。我的主要问题是如何使用 JavaFX 运送 jar?我是否必须包括一个罐子,如果是,我从哪里得到它?因为如果我没记错的话,eclipse 似乎没有将 JavaFX 打包到我的可运行文件中。
这是一个对我来说已经触发此行为的示例:
// This would throw a java.lang.NoClassDefFoundError for the JFXPanel but is effectively the same problem
public class Test extends Application
{
public static void main(String[] Args)
{
launch(Args);
}
@Override
public void start(Stage primaryStage) {
primaryStage.setTitle("Hello World!");
StackPane root = new StackPane();
primaryStage.setScene(new Scene(root, 300, 250));
primaryStage.show();
}
}
谢谢您的帮助!
解决方案
JavaFx 已被删除到 JDK> = 11 中,现在是一个单独的项目 opensurse [openjfx] ( https://openjfx.io/ )。现在创建一个可在任何地方运行的应用程序 javafx 版本变得更加困难,但它是一个不断发展的过程,我认为这是很好的文档 [doc-image-live] ( https://openjfx.io/ openjfx-docs/#modular )。
我在开发JDK 1.8时遇到了一个类似的问题,但在我的版本中,java系统是openjdk11,我认为这是同样的情况。
您的示例是错误的,因为不是 JavaFX 应用程序。JavaFX 应用程序必须扩展javafx.application.Application并在主调用方法launch中,该方法将调用从 Application 继承的方法start 。
这是 Oracle 的一个简单示例
public class HelloWorld extends Application {
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) {
primaryStage.setTitle("Hello World!");
Button btn = new Button();
btn.setText("Say 'Hello World'");
btn.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
System.out.println("Hello World!");
}
});
StackPane root = new StackPane();
root.getChildren().add(btn);
primaryStage.setScene(new Scene(root, 300, 250));
primaryStage.show();
}
}
ps:你说javafx的时候一定要加上java版本,因为我们不知道你的java版本
推荐阅读
- php - 在 laravel 中找不到类“App\Http\Controllers\Image”
- sql - 选择不在 group by 语句上的列
- python - Pyton 脚本仅导出来自 json 的信息
- javascript - 刷新 TypeError 后反应:articles[(articles.length - 1)] 未定义
- mysql - 每个组的第一行按顺序排列
- python-3.x - 堆积条显示 Matplotlib 中 2 个变量的百分比值?
- ruby-on-rails - Mongoid Search Gem 不会更新关联关键字
- c++ - 无论如何我可以在结构中声明一个二维数组并将其传递给函数以在 C++ 中输入数字吗?
- amazon-web-services - 将文件功能与 Terraform 工作区一起使用
- javascript - 如何删除所有数据并更新页面而不使用 useEffect 刷新