当我开始.jar app在mac上什么也不做

时间:2017-09-18 14:23:01

标签: macos javafx

我制作了一个简单的JavaFx应用程序,它读/写txt文件(代码如下)。我在Windows平台(7及更高版本)上测试过它。 之后我给了我的朋友在Mac上进行测试。但是当我们运行它时,什么都不做。 GUI没有出现。

我尝试通过终端运行它(只是"药物和掉落"图标到终端,然后进入终端。我不知道我做对了吗?)并且终端返回了消息&# 34;许可被拒绝"。有人可以解释运行应用程序需要什么,以及什么是不允许的?

我发现了类似的问题there,但它没有回答......

代码:

import javafx.application.*;
import javafx.concurrent.Task;
import javafx.geometry.Orientation;
import javafx.geometry.Pos;
import javafx.scene.*;
import javafx.scene.control.Label;
import javafx.scene.control.SplitPane;
import javafx.scene.text.Font;
import javafx.stage.*;
import javafx.scene.layout.*;

import java.io.*;
import java.nio.charset.Charset;
import java.util.*;
import java.util.concurrent.ThreadLocalRandom;

public class Main extends Application {

    static Properties props;
    static double fontSize;
    static String charsetName;
    static long mills;
    static String delimiter;
    static String pathToDictionary;
    static String pathErrLog;

    static {
        String pathFileProps = System.getProperty("user.dir") + "\\props.txt";
        props = new Properties();
        try {
            FileInputStream fis = new FileInputStream(pathFileProps);
            props.load(fis);
            fontSize = Double.parseDouble(props.getProperty("Font"));
            charsetName = props.getProperty("Charset");
            mills = Long.parseLong(props.getProperty("mills"));
            delimiter = props.getProperty("delimiter");
            pathToDictionary = props.getProperty("dict.path");
            fis.close();
        } catch (IOException e) {
            try {
                props.put("Font", "20");
                props.put("Charset", "UTF-8");
                props.put("mills", "1000");
                props.put("delimiter", "\t");
                props.put("dict.path", System.getProperty("user.dir") + "\\dict.txt");
                System.out.println("dictPath:" + System.getProperty("user.dir") + "\\dict.txt");
                System.setProperty("file.encoding", "UTF-8");
                FileOutputStream fos = new FileOutputStream(pathFileProps);
                props.store(fos
                        , "Props description:" + "\n" +
                                "Font" + "\t\t" + "size of font's words " + "\n" +
                                "Charset" + "\t" + "charset of file-dictionary" + "\n" +
                                "mills" + "\t\t" + "per animations in milliseconds" + "\n" +
                                "delimiter" + "\t" + "delimiter between a pair words in string: eng<->rus \"<->\" is delimiter there." + "\n" +
                                "dict.path" + "\t" + "path to file-dictionary. Use \"/\"-symbol in path. Ex: C:/temp/dict.txt" + "\n" +
                                "\t\t\t" + "Use only eng symbols to set path!" + "\n" +
                                "\tYou can change only values!\n");
                fos.close();
                System.exit(0);
            } catch (IOException e1) {
                errPrint(e1,"Ошибка создания файла: " + pathFileProps + "\n");

            }
        }

    }

    ArrayList<String> dictionary = new ArrayList<>();

    public static void errPrint(Exception exc, String note) {
        if (pathErrLog == null) {
            pathErrLog = System.getProperty("user.dir") + "\\errors.log";
        }
        try {
            PrintWriter outFile = new PrintWriter(new FileWriter(pathErrLog, true));
            outFile.println(note);
            exc.printStackTrace(outFile);
            outFile.close();
            System.exit(0);

        } catch (IOException e) {
            e.printStackTrace();
        }


    }

    public static void main(String[] args) throws Exception {

        launch(args);
    }

    public void init() throws IOException {
        try {
            BufferedReader reader = new BufferedReader(new FileReader(pathToDictionary));
            int cnt = 0;
            while (reader.ready()) {
                String line = new String(reader.readLine().getBytes(), Charset.forName(charsetName));
                dictionary.add(line);
            }
        } catch (FileNotFoundException e) {
            errPrint(e,"Не найден файл " + pathToDictionary);
        } catch (IOException e) {
            errPrint(e,"Ошибка чтения файла " + pathToDictionary);
        }
    }

    public void start(Stage myStage) {

        myStage.setTitle("WordsLearner");
        SplitPane sp = new SplitPane();
        sp.setOrientation(Orientation.VERTICAL);
        Label labelUp = new Label();
        Label labelDw = new Label();

        labelUp.setFont(new Font(fontSize));
        labelDw.setFont(new Font(fontSize));

        Scene scene = new Scene(sp, 600, 200);
        myStage.setScene(scene);

        final StackPane sp1 = new StackPane();
        sp1.getChildren().add(labelUp);
        sp1.setAlignment(Pos.BOTTOM_CENTER);
        final StackPane sp2 = new StackPane();
        sp2.getChildren().add(labelDw);
        sp2.setAlignment(Pos.TOP_CENTER);

        final boolean[] flag = {true};
        sp.setOnMouseClicked(event -> {
            Task<Void> task = new Task<Void>() {
                @Override
                public Void call() throws Exception {
                    if (flag[0]) {
                        flag[0] = false;
                        final String[] str = new String[1];
                        final String[] eng = new String[1];
                        final String[] rus = new String[1];
                        while (true) {
                            Platform.runLater(() -> {
                                try {
                                    str[0] = dictionary.get(ThreadLocalRandom.current().nextInt(0, dictionary.size()));
                                    eng[0] = str[0].split(delimiter)[0];
                                    rus[0] = str[0].split(delimiter)[1];
                                    labelUp.setText(eng[0]);
                                    labelDw.setText(rus[0]);
                                } catch (Exception e) {
                                    System.exit(-1);
                                }
                            });
                            Thread.sleep(mills);
                        }
                    }
                    return null;
                }
            };
            new Thread(task).start();

        });

        sp.getItems().addAll(sp1, sp2);
        sp.setDividerPositions(0.5f, 0.5f);

        myStage.show();
    }

    public void stop() {
        System.exit(0);
    }
}

0 个答案:

没有答案