0

ええ、これはまったく奇妙です...なぜこれが起こっているのかわかりませんが、ユーザーがボタンをクリックすると、作業ディレクトリに新しいディレクトリを作成する単純な Java Swing プログラムがあります。

import javax.swing.*;
import java.awt.*;
import java.io.File;
import java.io.IOException;

/**
  * Created by jasper on 11/28/15.
  */
 public class JarBundlerTest extends JFrame{

    public JarBundlerTest(){
        setTitle("JarBundler Test");
        setLayout(new BorderLayout());

        JButton button = new JButton("Create File");
        button.addActionListener((ActionListener) -> createFile());
        add(button, BorderLayout.CENTER);

        pack();
        setMinimumSize(getSize());
        setLocationRelativeTo(null);
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        setVisible(true);

    }

    public void createFile(){
        File f = new File("./newfile");
        if(f.mkdirs()) {
            JOptionPane.showMessageDialog(null, "Created directory " + f.getPath());
        }else{
            JOptionPane.showMessageDialog(null, "Could not create directory.");
        }
    }

    public static void main(String[] args){
        new JarBundlerTest();
    }

}

私の Mac では、Jar ファイルにバンドルしてデスクトップに移動すると機能します。しかし、appbundlerを使用してアプリ ファイルにバンドルすると、「ディレクトリを作成できませんでした」というダイアログが表示されます。を使用<option value="-Duser.dir=$APP_ROOT"/>しています。これにより、作業ディレクトリがアプリケーション バンドルに配置されます。この行を省略しても動作しますが、作業ディレクトリをアプリバンドルに入れたいです。

しかし、奇妙なことに、 を呼び出すとf.getAbsolutePath()、正しいファイル パスが返されます。ディレクトリが存在しないことはわかっており、そうする権限があります。ディレクトリが作成されないのはなぜですか? これを修正するにはどうすればよいですか?

ここに私のbuild.xmlがあります:

<?xml version="1.0" encoding="UTF-8"?>
<project name="tempBuildFile" default="bundle-app" basedir="/Users/jasper/Desktop">
    <description>Temporary build config for ant script</description>
    <taskdef name="bundleapp"
        classname="com.oracle.appbundler.AppBundlerTask"
        classpath="/Users/jasper/ant/lib/appbundler-1.0.jar" />
    <target name="bundle-app">
        <bundleapp outputdirectory="/Users/jasper/Desktop"
            name="JarBundlerTest"
            displayname="JarBundlerTest"
            identifier="JarBundlerTest"
            shortversion="1.1"
            icon="/Users/jasper/Desktop/developer/java/lib/GenericApp.icns"
            mainclassname="JarBundlerTest">
            <classpath  file="/Users/jasper/Desktop/JarBundlerTest.jar"/>
            <option value="-Dapple.laf.useScreenMenuBar=true"/>
            <option value="-Duser.dir=$APP_ROOT"/> 
        </bundleapp>
    </target>
</project>
4

0 に答える 0