2017-05-06 8 views
0

Ich arbeite mit einem javafx Projekt mit Google Auth2.0 für Anmelden und amazon s3 zum Speichern von Datei. Ich habe den folgenden Code für diesen Zweck geschrieben. Ich habe einen Dateiwähler, um Bild zu s3 hochzuladen. Die App funktioniert gut mit Anmeldung, aber wenn ich versuche, Datei auf s3 hochzuladen, gibt es eine Ausnahme, die unten angegeben ist. Ich habe meinen Code unten angehängt bitteHochladen der Datei in Amazon S3

überprüfen

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); 
     } 
    } 

    } 

}

Ausnahmen

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) 

Wenn ich die Amazon S3 separat verwenden es funktioniert gut, aber nicht funktioniert, wenn ich versuche, es mit meiner App zu integrieren. Bitte helfen Sie mir, das Problem herauszufinden. Danke im Voraus.

Antwort

0

Ja, habe meine Antwort bekommen. Das Problem ist mit der Bibliothek. Wenn Sie ein Problem damit haben, verwenden Sie einfach die entsprechende Bibliotheksversion und das wird es lösen.