我正在使用google auth2.0进行登录的javafx项目和用于存储文件的amazon s3。我为此目的编写了以下代码。我有一个文件选择器,用于将图像上传到s3。该应用程序适用于登录,但当我尝试将文件上传到s3时,它给出了一些例外情况,如下所示。我已在下面附上我的代码,请检查
main.java
package main;
import controller.signupController;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Scene;
import javafx.scene.image.Image;
import javafx.scene.layout.AnchorPane;
import javafx.stage.Stage;
public class Main extends Application {
Stage signinStage,signupStage,mainSatge,decreptStage,profilestage,aws;
@Override
public void start(Stage primaryStage) throws Exception {
FXMLLoader loader=new FXMLLoader(getClass().getResource("/view/signinScreen.fxml"));
AnchorPane pane=loader.load();
Scene scene=new Scene(pane);
primaryStage.setScene(scene);
scene.getStylesheets().add(Main.class.getResource("/style/styleSheet.css").toExternalForm());
primaryStage.setScene(scene);
primaryStage.getIcons().addAll(new Image("/src/Cornie-icons-00.png"));
primaryStage.setResizable(false);
primaryStage.show();
}
public void mainWindow(){
try {
FXMLLoader loader=new FXMLLoader(getClass().getResource("/view/mainScreen.fxml"));
AnchorPane pane=loader.load();
Scene scene=new Scene(pane);
mainSatge=new Stage();
mainSatge.setScene(scene);scene.getStylesheets().add(Main.class.getResource("/style/styleSheet.css").toExternalForm());
mainSatge.setScene(scene);
mainSatge.getIcons().addAll(new Image("/src/Cornie-icons-00.png"));
mainSatge.setResizable(false);
mainSatge.show();
}catch (Exception c){
}
}
public void signupWindow(){
try {
FXMLLoader loader=new FXMLLoader(getClass().getResource("/view/signupScreen.fxml"));
AnchorPane pane=loader.load();
Scene scene=new Scene(pane);
signupController controller=loader.getController();
controller.main(this, signupStage);
signupStage=new Stage();
signupStage.setScene(scene);scene.getStylesheets().add(Main.class.getResource("/style/styleSheet.css").toExternalForm());
signupStage.setScene(scene);
signupStage.getIcons().addAll(new Image("/src/Cornie-icons-00.png"));
signupStage.setResizable(true);
signupStage.show();
}catch (Exception c){
}
}
public void decreptWindow(){
try {
FXMLLoader loader=new FXMLLoader(getClass().getResource("/view/decreptImageScreen.fxml"));
AnchorPane pane=loader.load();
Scene scene=new Scene(pane);
decreptStage=new Stage();
decreptStage.setScene(scene);scene.getStylesheets().add(Main.class.getResource("/style/styleSheet.css").toExternalForm());
decreptStage.setScene(scene);
decreptStage.getIcons().addAll(new Image("/src/Cornie-icons-00.png"));
decreptStage.setResizable(true);
decreptStage.show();
}catch (Exception c){
}
}
public void profilewindow(){
try {
FXMLLoader loader=new FXMLLoader(getClass().getResource("/view/profile.fxml"));
AnchorPane pane=loader.load();
Scene scene=new Scene(pane);
profilestage=new Stage();
profilestage.setScene(scene);
profilestage.getIcons().addAll(new Image("/src/Cornie-icons-00.png"));
profilestage.setResizable(false);
profilestage.show();
}catch (Exception c){
}
}
public void aws(){
try {
FXMLLoader loader=new FXMLLoader(getClass().getResource("/view/aws.fxml"));
AnchorPane pane=loader.load();
Scene scene=new Scene(pane);
aws=new Stage();
aws.setScene(scene);
aws.getIcons().addAll(new Image("/src/Cornie-icons-00.png"));
aws.setResizable(false);
aws.show();
}catch (Exception c){
}
}
public static void main(String[] args) {
launch(args);
}
}
mainController.java
package controller;
import com.amazonaws.auth.AWSCredentials;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3Client;
import com.amazonaws.services.s3.model.PutObjectRequest;
import com.jfoenix.controls.JFXButton;
import entity.imageEntity;
import java.io.File;
import java.net.MalformedURLException;
import javafx.animation.FadeTransition;
import javafx.animation.TranslateTransition;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.fxml.Initializable;
import javafx.scene.control.Label;
import javafx.scene.control.ListView;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.AnchorPane;
import javafx.util.Duration;
import main.Main;
import org.kairos.components.RippleViewRow;
import org.kairos.layouts.RecyclerView;
import java.net.URL;
import java.time.Instant;
import java.time.temporal.ChronoUnit;
import java.util.Date;
import java.util.ResourceBundle;
import java.util.logging.Level;
import java.util.logging.Logger;
import javafx.event.EventHandler;
import javafx.scene.input.MouseEvent;
import javafx.scene.shape.Circle;
import javafx.stage.FileChooser;
public class mainController implements Initializable {
@FXML
private JFXButton historyBTN;
@FXML
private JFXButton addBTN;
@FXML
private JFXButton DecryptimageBTN,logoutBTN;
@FXML
private JFXButton contactsBTN;
@FXML
private JFXButton profileBTN;
@FXML
private JFXButton aboutBTN;
@FXML
private Label nameLB;
@FXML
private Label loggedInEmail;
@FXML
private ImageView imageProfile;
@FXML
private Label usernameLB;
@FXML
private RecyclerView<imageEntity> recycleView;
@FXML
private AnchorPane blackPane;
@FXML
private AnchorPane drawerPane;
@FXML
private Label imageLink;
@FXML
private ImageView drawerIcon;
boolean drawer_show=true;
@FXML
private ImageView imageUpload;
@FXML
private ImageView img;
@Override
public void initialize(URL location, ResourceBundle resources) {
loggedInEmail.setText(Web.getLoggedIn().getDisplayName());
imageLink.setText(Web.getLoggedIn().getBirthday());
usernameLB.setText(Web.getLoggedIn().getGender());
imageProfile.setImage(new Image(Web.getLoggedIn().getImage().getUrl()));
imageProfile.setClip(new Circle(100));
blackPane.setVisible(false);
FadeTransition fadeTransition=new FadeTransition(Duration.seconds(1),blackPane);
fadeTransition.setFromValue(1);
fadeTransition.setToValue(0);
fadeTransition.play();
TranslateTransition translateTransition=new TranslateTransition(Duration.seconds(1),drawerPane);
translateTransition.setToX(-500);
translateTransition.play();
drawerIcon.setOnMouseClicked(event -> {
if (drawer_show==true){
blackPane.setVisible(true);
FadeTransition fadeTransition1=new FadeTransition(Duration.seconds(1),blackPane);
fadeTransition1.setFromValue(0);
fadeTransition1.setToValue(0.12);
fadeTransition1.play();
TranslateTransition translateTransition1=new TranslateTransition(Duration.seconds(1),drawerPane);
translateTransition1.setToX(0);
translateTransition1.play();
drawer_show=false;
drawerIcon.setImage(new Image("/src/left_arrow.png"));
}else {
FadeTransition fadeTransition0=new FadeTransition(Duration.seconds(1),blackPane);
fadeTransition0.setFromValue(0.12);
fadeTransition0.setToValue(0);
fadeTransition0.play();
fadeTransition0.setOnFinished(event1 -> {
blackPane.setVisible(false);
});
TranslateTransition translateTransition0=new TranslateTransition(Duration.seconds(1),drawerPane);
translateTransition0.setToX(-500);
translateTransition0.play();
drawerIcon.setImage(new Image("/src/drawer.png"));
drawer_show=true;
}
});
blackPane.setOnMouseClicked(event -> {
FadeTransition fadeTransition0=new FadeTransition(Duration.seconds(1),blackPane);
fadeTransition0.setFromValue(0.12);
fadeTransition0.setToValue(0);
fadeTransition0.play();
fadeTransition0.setOnFinished(event1 -> {
blackPane.setVisible(false);
});
TranslateTransition translateTransition0=new TranslateTransition(Duration.seconds(1),drawerPane);
translateTransition0.setToX(-500);
translateTransition0.play();
drawerIcon.setImage(new Image("/src/drawer.png"));
drawer_show=true;
});
profileBTN.setGraphic(new ImageView(new Image("/src/ic_account_circle_black_24dp.png")));
historyBTN.setGraphic(new ImageView(new Image("/src/ic_assignment_black_24dp.png")));
contactsBTN.setGraphic(new ImageView(new Image("/src/ic_contacts_black_24dp.png")));
aboutBTN.setGraphic(new ImageView(new Image("/src/ic_error_outline_black_24dp.png")));
DecryptimageBTN.setGraphic(new ImageView(new Image("/src/ic_error_outline_black_24dp.png")));
logoutBTN.setGraphic(new ImageView(new Image("/src/ic_power_settings_new_black_24dp.png")));
DecryptimageBTN.setOnAction(event -> {
new Main().decreptWindow();
});
profileBTN.setOnAction(event -> {
new Main().profilewindow();
});
contactsBTN.setOnAction(event -> {
new Main().aws();
});
Adapter adapter=new Adapter();
imageEntity imageEntity=new imageEntity();
imageEntity.setImageSrc("/src/preview_tom-clancys-rainbow-six-siege-ubisoft-montreal2.jpg");
imageEntity.setName("Image Name: Test Image");
imageEntity.setDate("Date Uploaded: 23-04-2017");
imageEntity.setPrice("Price: $3.5");
recycleView.setAdapter(adapter);
recycleView.getItems().addAll(imageEntity,imageEntity,imageEntity,imageEntity,imageEntity);
addBTN.setOnMouseClicked(new EventHandler<MouseEvent>() {
public void handle(MouseEvent event) {
FileChooser fileChooser=new FileChooser();
fileChooser.setInitialDirectory(new File("c:\\"));
fileChooser.getExtensionFilters().addAll(new FileChooser.ExtensionFilter("JPG Images","*.jpg"),
new FileChooser.ExtensionFilter("JPEG Images","*.jpeg"),
new FileChooser.ExtensionFilter("PNG Images","*.png"));
File file=fileChooser.showOpenDialog(null);
if (file!=null){
AWSCredentials Credentials = new BasicAWSCredentials(
"client key",
"client secret");
AmazonS3Client amazonS3Client = new AmazonS3Client(Credentials);
String bucketName = "awsimagetrading";
String key = file.getName();
System.out.println("Uploading a new object to S3 from a file\n");
AmazonS3 s3client = new AmazonS3Client(Credentials);
s3client.putObject(new PutObjectRequest(bucketName,key,file));
URL url = amazonS3Client.generatePresignedUrl(bucketName,key,Date.from(Instant.now().plus(5,ChronoUnit.MINUTES)));
System.out.println(url);
//img.setImage(new Image( file.toURI().toURL().toExternalForm()));
}
}
});
}
public class Adapter extends RecyclerView.Adapter<Adapter.Holder> {
@Override
public RecyclerView.ViewRow call(ListView listView) {
return new RippleViewRow(this);
}
@Override
public Holder onCreateViewHolder(FXMLLoader fxmlLoader) {
fxmlLoader.setLocation(mainController.class.getResource("/view/imageCardViewScreen.fxml"));
Holder holder = new Holder(fxmlLoader);
return holder;
}
@Override
public void onBindViewHolder(Holder holder, Object o) {
imageEntity imageEntity = (imageEntity) o;
holder.imageView.setImage(new Image(imageEntity.getImageSrc()));
holder.name.setText(imageEntity.getName());
holder.price.setText(imageEntity.getPrice());
holder.date.setText(imageEntity.getDate());
}
public class Holder extends RecyclerView.ViewHolder {
@FXML
private Label date;
@FXML
private JFXButton download;
@FXML
private Label price;
@FXML
private Label name;
@FXML
private ImageView imageView;
public Holder(FXMLLoader loader) {
super(loader);
}
}
}
}
例外
enter code hereException in thread "JavaFX Application Thread" java.lang.NoClassDefFoundError: org/apache/http/util/Args
at org.apache.http.conn.scheme.Scheme.<init>(Scheme.java:91)
at org.apache.http.impl.conn.SchemeRegistryFactory.createDefault(SchemeRegistryFactory.java:50)
at com.amazonaws.http.ConnectionManagerFactory.createPoolingClientConnManager(ConnectionManagerFactory.java:29)
at com.amazonaws.http.HttpClientFactory.createHttpClient(HttpClientFactory.java:97)
at com.amazonaws.http.AmazonHttpClient.<init>(AmazonHttpClient.java:164)
at com.amazonaws.AmazonWebServiceClient.<init>(AmazonWebServiceClient.java:119)
at com.amazonaws.AmazonWebServiceClient.<init>(AmazonWebServiceClient.java:103)
at com.amazonaws.services.s3.AmazonS3Client.<init>(AmazonS3Client.java:357)
at com.amazonaws.services.s3.AmazonS3Client.<init>(AmazonS3Client.java:339)
at controller.AWSUpoladController$1.handle(AWSUpoladController.java:64)
at controller.AWSUpoladController$1.handle(AWSUpoladController.java:47)
at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54)
at javafx.event.Event.fireEvent(Event.java:198)
at javafx.scene.Scene$ClickGenerator.postProcess(Scene.java:3470)
at javafx.scene.Scene$ClickGenerator.access$8100(Scene.java:3398)
at javafx.scene.Scene$MouseHandler.process(Scene.java:3766)
at javafx.scene.Scene$MouseHandler.access$1500(Scene.java:3485)
at javafx.scene.Scene.impl_processMouseEvent(Scene.java:1762)
at javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2494)
at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:381)
at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:295)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent$354(GlassViewEventHandler.java:417)
at com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:389)
at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:416)
at com.sun.glass.ui.View.handleMouseEvent(View.java:555)
at com.sun.glass.ui.View.notifyMouse(View.java:937)
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at com.sun.glass.ui.win.WinApplication.lambda$null$148(WinApplication.java:191)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.ClassNotFoundException: org.apache.http.util.Args
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
当我单独使用亚马逊s3时,它工作正常,但当我尝试将其与我的应用程序集成时无效。你能不能帮我弄清楚问题所在。谢谢你提前。
答案 0 :(得分:0)
是的,我得到了答案。问题出在图书馆。如果你们面临与此相关的问题,只需使用适当的库版本即可解决问题。