Java FX Drag and Drop не работает при открытии файла JAR - PullRequest
0 голосов
/ 06 декабря 2018

Я довольно новичок в JavaFX и сейчас занимаюсь разработкой довольно простой программы.Пользователи будут перетаскивать папку в мое приложение, а затем генерировать ZIP-версию этой папки.Я использую JavaFX, чтобы сделать его удобным для пользователя.

Моя проблема в том, что когда я запускаю проект на Netbeans 8.2, программа делает то, что должна делать.Но когда я запускаю jar-файл после «сборки и очистки», папка, которую перетаскивают в мое приложение, не позволяет этого.

Я уже читал о нативной упаковке для NetBeans, но по какой-то причине она производиттот же результат.

Вот мой код:

public class FXMLDocumentController implements Initializable {

@FXML
private Label label,fileName;
@FXML
private Button button;
@FXML
private ImageView imageView;

private File file = null;
private boolean isFolder = false;
private  String locationStr= "\\html5\\data\\js\\data.js";



@FXML
private void handleButtonAction(ActionEvent event) throws IOException{
    System.out.println("handleButtonAction");
    //createJSFile();
    File newDir= copyDir(file);
    String newDirStrLocation = newDir.getAbsolutePath();
    String newDirContents = "";

    BufferedReader br = checkDataJSFile(newDirStrLocation);

    newDirContents=br.readLine();
    System.out.println(newDirContents);
    createJSFile(newDirContents, newDirStrLocation+""+locationStr);

    File assets = new File("assets");

    FileUtils.copyDirectory(assets, newDir);

    Compression.zipFile(newDirStrLocation, newDirStrLocation+".zip", true);

    newDir.delete();


}

@Override
public void initialize(URL url, ResourceBundle rb) {
    button.setVisible(false);
}    

@FXML
private void handleDragOver(DragEvent event) {
    if(event.getDragboard().hasFiles()){
        event.acceptTransferModes(TransferMode.ANY);
    }

}

@FXML
private void handleDropped(DragEvent event) throws IOException {
    imageView.setImage(null);
    List<File> files = event.getDragboard().getFiles();
    file = files.get(0);
    fileName.setText(file.getAbsolutePath());
    BufferedReader br;

    if(file != null){
        isFolder = checkFileExtension(file.getAbsolutePath());
        //label.setText(notify(isFolder));

        if(isFolder==true){
           br = checkDataJSFile(file.getAbsolutePath());

           if(br != null){

            boolean debugMode = checkDataJSDebugMode(br);

            if(debugMode){
                 label.setText("debugMode is true. No action performed.");
                 button.setVisible(false);
            }else{
                label.setText("Click below to generate the feedback version of this course.");
                button.setVisible(true);
                br.close();
            }
           }else{
               label.setText("The file 'data.js' was not found.");
           }

        }

    }else{
        label.setText("Drag a valid folder to process.");
    }

}

private boolean checkFileExtension(String filePath){
    boolean isValid=false;
    int i = filePath.lastIndexOf('.');
    //System.out.println(filePath);
    if(i<0){
        isValid=true;
    }
    //System.out.println("isValid value is: "+ isValid );
    return isValid;
}

private boolean checkDataJSDebugMode(BufferedReader br) throws IOException{
    boolean debugMode =false;
    String paramToFind="\"debugMode\":true";
    String dataJSFileContents;
    System.out.println("checkDataJSDebugMode()");

    dataJSFileContents=br.readLine();
    System.out.println(dataJSFileContents);
    if(dataJSFileContents.contains(paramToFind)){
        debugMode=true;
    }


    return debugMode;
}

private BufferedReader checkDataJSFile(String source){
    //boolean isPresent = false;
    BufferedReader br=null;

    File folder = new File(source+""+locationStr);

    try {
        br = new BufferedReader(new FileReader(folder));
        //isPresent = true;
    } catch (FileNotFoundException ex) {
        label.setText("Folder does not contain the data.js file!");
    }

    return br;
}

private void createJSFile(String sourceJSContents,String location) throws IOException{

    String paramToFind = "\"debugMode\":false";
    Pattern word = Pattern.compile(paramToFind);
    System.out.println("createJSFile()");

    Matcher match = word.matcher(sourceJSContents);

    int s=0,e=0;
    while(match.find()){
        s = match.start();
        e = match.end();
    }

    String changeParam = "\"debugMode\":true";
    String toWrite = sourceJSContents.substring(0, s-1)+","+changeParam+","+sourceJSContents.substring(e+1,sourceJSContents.length());
    System.out.println(toWrite);
    File dataJS = new File(location);
    BufferedWriter bw = new BufferedWriter(new FileWriter(dataJS,false));
    bw.write(toWrite);
    bw.close();
}

private File copyDir(File src) throws IOException{
    String newFileName= src.getName()+" - FEEDBACK VERSION";
    File newDir= new File(src.getParent()+"\\"+newFileName);

    if(newDir.exists()){
        newDir.delete();
    }
    newDir.mkdir();

    FileUtils.copyDirectory(src,newDir);
    return newDir;
}


@FXML
private void handleDragEntered(DragEvent event) throws FileNotFoundException {
    Image img = new Image(new FileInputStream("assets\\loader.gif"));
    imageView.setImage(img);
}

}

Любая помощь будет оценена.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...