java - java.lang.NoClassDefFoundError: javafx/embed/swing/SwingFXUtils
问题描述
每次我尝试保存图像时都会收到此错误。我可以通过此代码选择图像,然后按保存按钮,但随后我在电脑上的任何地方都找不到保存的图像,而是出现以下错误。我正在使用 eclipse 2020-9 和 java 版本 15.0.1。这是错误: java.lang.NoClassDefFoundError: javafx/embed/swing/SwingFXUtils 有什么帮助吗?
package application;
import java.awt.Desktop;
import java.io.File;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javafx.application.Application;
import javafx.embed.swing.SwingFXUtils;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.Menu;
import javafx.scene.control.MenuBar;
import javafx.scene.control.MenuItem;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox;
import javafx.stage.FileChooser;
import javafx.stage.Stage;
import javax.imageio.ImageIO;
/**
*
* @web http://java-buddy.blogspot.com
*/
public class Main extends Application {
@Override
public void start(Stage primaryStage) {
final FileChooser fileChooser = new FileChooser();
final Button openButton = new Button("Open Image");
openButton.setOnAction(
new EventHandler<ActionEvent>() {
@Override
public void handle(final ActionEvent e) {
setExtFilters(fileChooser);
File file = fileChooser.showOpenDialog(primaryStage);
if (file != null) {
openNewImageWindow(file);
}
}
});
StackPane root = new StackPane();
root.getChildren().add(openButton);
Scene scene = new Scene(root, 400, 150);
primaryStage.setTitle("java-buddy.blogspot.com");
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
private void setExtFilters(FileChooser chooser){
chooser.getExtensionFilters().addAll(
new FileChooser.ExtensionFilter("All Images", "*.*"),
new FileChooser.ExtensionFilter("PNG", "*.png")
);
}
private void openNewImageWindow(File file){
Stage secondStage = new Stage();
MenuBar menuBar = new MenuBar();
Menu menuFile = new Menu("File");
MenuItem menuItem_Save = new MenuItem("Save Image");
menuFile.getItems().addAll(menuItem_Save);
menuBar.getMenus().addAll(menuFile);
Label name = new Label(file.getAbsolutePath());
Image image = new Image(file.toURI().toString());
ImageView imageView = new ImageView();
menuItem_Save.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
FileChooser fileChooser = new FileChooser();
fileChooser.setTitle("Save Image");
File file = fileChooser.showSaveDialog(secondStage);
if (file != null) {
try {
ImageIO.write(SwingFXUtils.fromFXImage(imageView.getImage(),
null), "png", file);
} catch (IOException ex) {
Logger.getLogger(
Main.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
});
final VBox vbox = new VBox();
vbox.setAlignment(Pos.CENTER);
vbox.setSpacing(10);
vbox.setPadding(new Insets(0, 10, 0, 10));
vbox.getChildren().addAll(name, imageView);
imageView.setFitHeight(400);
imageView.setPreserveRatio(true);
imageView.setImage(image);
imageView.setSmooth(true);
imageView.setCache(true);
Scene scene = new Scene(new VBox(), 400, 350);
((VBox)scene.getRoot()).getChildren().addAll(menuBar, vbox);
secondStage.setTitle(file.getName());
secondStage.setScene(scene);
secondStage.show();
}
}
解决方案
推荐阅读
- html - iOS 12.2/ Swift:在 iPhone 上的 UIWebView 中读取 html 视频时出现问题
- typo3 - TYPO3 9.5 中的说话网址始终显示主页
- laravel-backpack - 我如何使用背包换 laravel 进行多语言
- python - 使用 Opencv 和 python 从高分辨率图像中检测和裁剪图像
- c# - 在 C# 中尝试动态绑定时无法从“typeA”转换为“typeB”
- kotlin - 将键值从 for 循环增加到映射
- linux - 如何使用 awk 根据两列查找唯一值
- python - 如何在python中将时间“now-5m”转换为日期时间对象
- javascript - 应用程序关闭时是否删除了侦听器?
- javascript - 赛普拉斯:网站端的一些请求得到空响应