Я пытаюсь написать программу автоматической оценки в java для других java-программ. Моя java-программа использует ProcessBuilder для создания процесса (с перенаправленным выводом ошибок), а затем выполняет студенческий java-класс.
Проблема в том, что меня блокируют, когда я пытаюсь прочитать из их выходного потока.
Теперь в качестве теста, когда я пытаюсь запустить их программу в терминале в одиночку, я пытаюсь сделать все вводы сразу, но по какой-то причине я получаю такое же поведение блокировки. Их программа запрашивает целое число, а затем набор строк. Если я наберу целое число, а затем пробел, а затем ввод, программа будет работать неправильно, и меня заблокируют.
Вот студенческая программа. Предположим, что объект 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]);
}
}
}
}