Задать вопрос
@kaleban

Получить результат работы метода и сохранить в переменную?

Есть такой код, я передаю на вход два параметра и получаю в консоле результат работы этого метода, мне необходимо сохранить результат в переменную как это сделать правильно ? Просьба помидорами не кидаться, буду рад любой помощи. Результат работы метода скрин

5e302a3a08318847421026.png

public static String activation(String serialNumber, String keyName) throws IOException, InterruptedException, SQLException {
        LocalDate futureDate = LocalDate.now().plusMonths(12);
        String formattedDate = futureDate.format(DateTimeFormatter.ofPattern("yyyyMMdd"));
        String[] command =
                {
                        "cmd",
                };
        Process p = Runtime.getRuntime().exec(command);
        new Thread(new SyncPipe(p.getErrorStream(), System.err)).start();
        new Thread(new SyncPipe(p.getInputStream(), System.out)).start();
        PrintWriter stdin = new PrintWriter(p.getOutputStream());
        stdin.println("C:\\tdes_ecb.exe " + serialNumber + " " + keyName + " " + formattedDate);
        stdin.close();
        int returnCode = p.waitFor();
        String code = Integer.toString(returnCode);
        return code;
    }

    static class SyncPipe implements Runnable {
        public SyncPipe(InputStream istrm, OutputStream ostrm) {
            istrm_ = istrm;
            ostrm_ = ostrm;

        }

        public void run() {
            try {
                final byte[] buffer = new byte[1024];
                for (int length = 0; (length = istrm_.read(buffer)) != -1; ) {
                    ostrm_.write(buffer, 0, length);

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

        private final OutputStream ostrm_;
        private final InputStream istrm_;
    }
  • Вопрос задан
  • 446 просмотров
Подписаться 1 Простой 1 комментарий
Пригласить эксперта
Ответы на вопрос 1
kaleban наверное утилита tdes_ecb.exe пишет в stderr
добавьте
+ " 2>&1"
stdin.println("c:\\Users\\Serguei\\echoargstostderr.cmd " + serialNumber + " "
				+ keyName + " " + formattedDate + " 2>&1");


если поможет отметьте как решение пож-та

и да вы когда копировали код вообще забыли читать что процесс печатает болезный

это делается так
StringBuffer processOutput = new StringBuffer();
		while ((line = stdoutBufferedReader.readLine()) != null) {
			processOutput.append(line);
		}
		StringBuffer processError = new StringBuffer();
		while ((line = stderrBufferedReader.readLine()) != null) {
			processError.append(line);
		}
		System.err.println("OUTPUT:" + processOutput.toString());
		System.err.println("ERROR	:" + processError.toString());
		int returnCode = process.waitFor();
		String code = Integer.toString(returnCode);
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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