То же самое работает над терминалом, но не в среде выполнения Java при использовании Ubuntu 14.04 LTS

У меня есть проект Java, который я разработал в окнах. Теперь, я хочу сделать это независимым от платформы.

Часть проекта: это берет c программу и выполняется. берет вход из файла и дает вывод в файле, затем сравнивает выходной файл с другим файлом и дает результат.

Сначала у меня есть класс, который работает .cpp файл и производит исполняемый файл. Как далеко я знаю, команда для этой работы - то же в обоих окнах и человечности, и это:

g++ -std=c++11 -o <name of executable file> <path of .cpp file>

Используя вышеупомянутую команду, это работает хороший терминал использования. Но при реализации того же самого в коде, это дает ошибку компиляции. Это означает следующие ошибки:

g++: fatal error: no input files

См. изображение, чтобы быть более ясными:

enter image description here

Мой код:

package judgecpp;

import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.file.Path;
import java.nio.file.Paths;

class CodeCompile implements Runnable, RunInCmd {

    Thread compilerThread;
    private final File fileCPP;

    public File file;
    public boolean errorHas;

    public CodeCompile(File fileCPP) {
        this.fileCPP = fileCPP;

        file = new File(String.format("compiledFile%d", CodeProcessing.getNewFileNumber()));
        compilerThread = new Thread(this, "compilerThread");
    }

    @Override
    public Process cmdRun(String command) throws IOException {
        Runtime rt;
        Process pr;
        rt = Runtime.getRuntime();
        pr = rt.exec(command);
        return pr;
    }

    @Override
    public void run() {

        try {
            String command = String.format("g++ -std=c++11 -o \"" + file.toString() + "\" \"" + fileCPP.toString() + "\"");
//            if(VerdictGiver.os.equals("uni")) command = String.format("g++ -std=c++11 \"" + fileCPP.toString() + "\" -o \"" + file.toString() + "\"");
//            command = "pwd";
            System.out.println("Code Compile: "+command);
            System.out.println("OS: "+VerdictGiver.os);
            Process pr = cmdRun(command);
            Path currentRelativePath = Paths.get("");
            String s = currentRelativePath.toAbsolutePath().toString();
            System.out.println("Current relative path is: " + s);
            BufferedReader input = new BufferedReader(new InputStreamReader(pr.getErrorStream()));

            errorHas = false;
            System.out.println("Compile Error Stream starts -----------------------------------------");
            while (input.readLine() != null) {
                System.out.println(input.readLine());
                errorHas = true;
            }
            System.out.println("Compile Error Stream ends -------------------------------------------");
        } catch (IOException ex) {
//            Logger.getLogger(CodeCompile.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}

Я сложен здесь в течение долгого времени.

Обновление:

Я получил решение, но не знайте, почему оно работает. Вместо строки:

String command = String.format("g++ -std=c++11 -o \"" + file.toString() + "\" \"" + fileCPP.toString() + "\"");

Я использовал следующую строку:

String command = String.format("cmd /c \"g++ -std=c++11 -o \"" + file.toString() + "\" \"" + fileCPP.toString() + "\"\"");

Это означает, что сгенерированная строка была бы похожа:

cmd /c "g++ -std=c++11 -o "compiledFile0" "Submissions/20_masd_0_2015_09_14_01_09_58.cpp""

Но в случае запущения программы, ни одна из следующих строк не работает:

enter image description here

Сначала (этот хорошо работает в терминале):

"./compiledFile0"<"/home/mamun/Desktop/ContestSettings/icpc2015-data/artichoke/12.in">"output1.txt"

Во-вторых:

cmd /c ""./compiledFile0"<"/home/mamun/Desktop/ContestSettings/icpc2015-data/artichoke/12.in">"output1.txt""

В-третьих:

cmd /c ""compiledFile0"<"/home/mamun/Desktop/ContestSettings/icpc2015-data/artichoke/12.in">"output1.txt""

В-четвертых:

"compiledFile0"<"/home/mamun/Desktop/ContestSettings/icpc2015-data/artichoke/12.in">"output1.txt"

Но на этот раз никакая удача, нуждаться в помощи.

1
задан 13 September 2015 в 22:45

0 ответов

Другие вопросы по тегам:

Похожие вопросы: