“Дескриптор недопустим” когда рабочая консоль .NET через Java

AddQuickHeader устарел, вместо него используйте SetRequestHeader.

Если вы явно зададите для Content-Length значение 0, это должно привести к добавлению заголовка «Content-Length: 0» к запросу.


    http.SetRequestHeader("Content-Length","0");

Обычно вы бы никогда не установили явно заголовок Content-Length, потому что Chilkat автоматически добавляет его (если он не равен нулю) на основе фактической длины контента.

9
задан Mechanical snail 2 October 2012 в 17:26
поделиться

5 ответов

Консольное приложение пытается установить позицию курсора для консоли. Это не возможно, так как нет на самом деле никакой консоли. Все операции, которые не приводят к простому чтению или записи, вероятно, вызовут ошибки, когда не будет никакой консоли (так как большинство из них требует, чтобы консольный буфер вывода работал).

Это - плохая идея сделать материал как установка позиции курсора или очистка экрана в консольных приложениях, которые Вы хотите автоматизировать. Основное обходное решение должно просто поместить незаконный оператор в выгоду попытки и отбросить исключение. От страницы MSDN в Системе. Консоль:

Вы не должны использовать Консольный класс для отображения вывода в необслуживаемых приложениях, таких как серверные приложения. Точно так же вызовы к методам, таким как Запись и WriteLine не имеют никакого эффекта в Приложениях Windows.

Консольные участники класса, которые обычно работают, когда базовый поток направлен к консоли, могли бы выдать исключение, если поток перенаправляется, например, в файл. Следовательно, программируйте свое приложение для ловли Системы. IO.IOException, если Вы перенаправляете стандартный поток.

11
ответ дан 3 November 2019 в 00:05
поделиться

Трудно для диагностирования без большего количества детали - возможно, полномочия... определенная обработка исключений (возможно, пишущий отслеживание стека в stderr) помогла бы чрезвычайно. но не много справки, если Вы не владеете приложением.

Если Вы не добираетесь нигде, Вы могли бы попытаться использовать отражатель для наблюдения то, что приложение.NET делает во время "Обнаружения" - это могло бы помочь определить причину.

0
ответ дан 3 November 2019 в 00:05
поделиться

Попробуйте это для получения потока вывода команды вызова

Runtime r = Runtime.getRuntime();
mStartProcess = r.exec(applicationName, null, fileToExecute);

StreamLogger outputGobbler = new StreamLogger(mStartProcess.getInputStream());
outputGobbler.start();

int returnCode = mStartProcess.waitFor();


class StreamLogger extends Thread{

   private InputStream mInputStream;

   public StreamLogger(InputStream is) {
        this.mInputStream = is;
    }

   public void run() {
        try {
            InputStreamReader isr = new InputStreamReader(mInputStream);
            BufferedReader br = new BufferedReader(isr);
            String line = null;
            while ((line = br.readLine()) != null) {
                    System.out.println(line);
            }
        } catch (IOException ioe) {
            ioe.printStackTrace();
        }
    }

}
0
ответ дан 3 November 2019 в 00:05
поделиться

Я не думаю, что существует проблема с программой Вашего друга. Вероятно, необходимо добраться, поток вывода процесса возражают, что Вы получаете от Runtime.getRuntime () .exec (командная строка) и называете чтение () методом или чем-то. Это могло бы работать.

0
ответ дан 3 November 2019 в 00:05
поделиться

Это может зависеть от того, как Ваше JAVA-приложение запускается. Если Ваше JAVA-приложение не имеет консоли, когда могут быть проблемы, когда консольное присутствие необходимо для Вашего внутреннего процесса. Считайте это.

0
ответ дан 3 November 2019 в 00:05
поделиться