Newer
Older
KisoJikkenNWP / src / main / java / istlab / KisoJikken / JCompiler.java
@motoki miura motoki miura on 9 Nov 2023 2 KB d
package istlab.KisoJikken;

import java.io.File;
import java.io.IOException;

public class JCompiler implements Runnable {

    Thread thread;
    Process process;
    String absolutePath;
    String pkgname;
    String javafname;

    public JCompiler(String p) {
        absolutePath = p;
        thread = new Thread(this);
        String[] ary;
        if (File.separator.equals("\\")) {
            ary = absolutePath.split("\\\\");
            // for (int i = 0; i < ary.length; i++)
                // System.out.println(ary[i]);
        } else {
            ary = absolutePath.split(File.separator);
        }
        for (int i = 0; i < ary.length; i++) {
            if (ary[i].equals("src")) {
                pkgname = ary[i + 1];
                javafname = ary[i + 2];
                break;
            }
        }
        thread.start();
    }

    @Override
    public void run() {
        // System.out.println("== コンパイル開始 ==");
        ProcessBuilder processBuilder = new ProcessBuilder("bash", "-c",
                "javac -encoding UTF-8 " + pkgname + "/*.java");
        if (App.isWindows) {
            processBuilder = new ProcessBuilder("javac","-encoding", "UTF-8" , pkgname + "/*.java");
        }
        processBuilder.redirectErrorStream(true);
        JTAConsole con = new JTAConsole("(Compile) javac " + pkgname + "/*.java");
        con.setMainSrcByFileName(absolutePath);
        con.Systemoutprintln("=== コンパイル開始 ===");

        con.Systemoutprintln(CommandRunner.prompt + "cd ~" + App.nwpsrc + "    (注:~ はチルダ記号〜 で,ホームディレクトリを表します)");
        con.Systemoutprintln(CommandRunner.prompt + "javac -encoding UTF-8 " + pkgname + "/*.java");
        // ProcessBuilder processBuilder = new ProcessBuilder("pwd");
        processBuilder.directory(new File(App.userhome + App.nwpsrc));
        // processBuilder.inheritIO();
        try {
            process = processBuilder.start();
            Launcher.allProcs.add(process);
            con.startBR(process);
            // BufferedReader reader = new BufferedReader(new
            // InputStreamReader(process.getInputStream()));
            // String line;
            // while ((line = reader.readLine()) != null) {
            // jta.append(line);
            // }
            process.waitFor();
        } catch (IOException | InterruptedException e1) {
            e1.printStackTrace();
        }
        con.Systemoutprintln("=== コンパイル終了 === (ALT+Wで閉じる)");
        thread = null;
    }
}