Я пытаюсь написать автоматическую программу оценки в java для других java-программ. Моя программа Java использует ProcessBuilder для создания процесса (с перенаправленным выводом ошибок), а затем выполняет класс java студента.Java Process и использование InputStream и OutputStream
Проблема в том, что я блокируюсь, когда пытаюсь читать из их выходного потока.
Теперь, когда я пытаюсь запустить свою программу только в терминале, я стараюсь делать все входные данные сразу, но по какой-то причине я получаю такое же блокирующее поведение. Их программа запрашивает целое число, а затем кучу строк. Если я набираю целое число, а затем пробел, за которым следует вход, программа не работает правильно, и я блокируюсь.
Это программа студента. Предположим, что объект Mid - это просто целое число и некоторые строки. Попробуйте запустить эту программу, а затем для входа на самом деле просто ввести что-то вроде ...
2 123456 matt smith 2 123455 jim bob 2 4 <- after the 4 hit enter
и смотреть по умолчанию «Блокировка» поведение программы.
import java.util.*;
public class HW3
{
public static Mid createMid()
{
Scanner in = new Scanner(System.in);
Mid myMid = new Mid();
System.out.print("Alpha? ");
myMid.alpha = in.next();
System.out.print("First name? ");
myMid.firstName = in.next();
System.out.print("Last name? ");
myMid.lastName = in.next();
System.out.print("Company? ");
myMid.company = in.nextInt();
return myMid;
}
public static void printMid(Mid x)
{
System.out.println("" + x.alpha + " " + x.lastName + " " + x.firstName + " " + x.company);
return;
}
public static void main(String[] args)
{
Scanner in = new Scanner(System.in);
System.out.println("Welcome to my HW3");
System.out.print("How many mids? ");
int numberMids = in.nextInt();
System.out.println("Is this your number..."+numberMids);
Mid[] arrayMids = new Mid[numberMids];
for(int i = 0; i < numberMids; i++)
{
arrayMids[i] = createMid();
}
System.out.print("What company would you like to print out? ");
int printCompany = in.nextInt();
for(int j = 0; j < numberMids; j++)
{
if(printCompany == arrayMids[j].company)
{
printMid(arrayMids[j]);
}
}
}
}
хммм ... по какой-то причине я все еще получаю заблокирован, когда я исполню ее в стандартном терминале Ubuntu .... – Matthew
Какую версию JDK вы используете? Я использую 1.7. Я запускаю Ubuntu 12.04, и он отлично работает из командной строки. –