0

У меня есть две программы Java, называется А и В. выглядит следующим образомПолучение ввода/вывода из программы Java работает в другой программе Java

Scanner deusex = new Scanner(System.in); 
ArrayList<String> list = new ArrayList<String>(); 
String again = "Y"; 

while (again == ("Y")) 
{ 
out.println("Enter a string."); 
String user1 = deusex.next(); 
list.add(user1); 
out.println("Input again? [Y/N]"); 
     again = deusex.next(); 
     if (again.equalsIgnoreCase("Y")) 
     again = "Y"; 

} 
out.println("Your elements: " + list); 
out.println("Delete elements? [Y/N]"); 
String y = deusex.next(); 

if (y.equalsIgnoreCase("y")) 
{ 
String again1 = "Y"; 
out.println("Printing outputs..."); 
    out.println(list); 
while (again1 == ("Y")) 
{ 
out.println("Enter index of element to delete [0,1,2...]"); 
    int user3 = deusex.nextInt(); 
    list.remove(user3); 
    out.println("Printing outputs..."); 
    out.println(list); 
    out.println("Input again? [Y/N]"); 
     again = deusex.next(); 
     if (again.equalsIgnoreCase("Y")) 
     again1 = "Y"; 
     else System.exit(0); 
} 
} 
else { out.println("Bye."); }; 
} 

}

Я закачанный А в .txt на Google Drive. Моя программа B написана для загрузки файла, затем сохраните его как .java-файл. Затем я скомпилирую его и попытаюсь запустить. Это часть кода B, что имеет важное значение:

System.out.println("Enter anything to compile and run."); 
String anything1 = Gooch.next(); 
String line = null; 
try 
{ 
Process pleasecompile = new ProcessBuilder("javac", "A.java").start(); 
Process pleaserun = new ProcessBuilder("java", "A").start(); 
BufferedReader input = new BufferedReader(new InputStreamReader(pleaserun.getInputStream())); 
BufferedWriter output= new BufferedWriter(new OutputStreamWriter(pleaserun.getOutputStream())); 
while ((line = input.readLine()) != null) { 
    System.out.println(line); 
    output.write(300); 
    } 
pleaserun.waitFor(); 
input.close(); 
} 
catch (Exception e) 
{ 
    e.printStackTrace(); 
    } 

Выполнение этого кода для B выводит только первую строку A. Я хочу быть в состоянии запустить в полном объеме и получить и дать входы и выходы , Я догадался, что мне нужно манипулировать буферизованными читателями некоторыми циклами или процессами, чтобы сделать это, но я понятия не имею, как это сделать.

Я знаю, что если я просто скомпилирую A.java с помощью процесса pleasecompile, я могу сразу вызвать класс после использования чего-то вроде A.main (String [0]) ;. Проблема в том, что файл A.class не существует во время компиляции, только после того, как он был загружен и скомпилирован сам, поэтому моя программа B дает мне не удается найти ошибку символа для A.main при компиляции. Мой вопрос заключается в том, могу ли я установить что-то, что вызовет класс для меня после компиляции A в B без ошибки, если не прибегать к манипулированию читателями.

+0

Используйте '.equals' для сравнения строк, а не' '== : 'while (" Y ".equals (снова))' –

ответ

0

Мое предложение - использовать отражение. В соответствии с классом кода B может компилироваться и выполняться. Когда B запускается, метод pleaseCompile будет компилировать класс A. Почему бы вам не пойти на размышления, которое используется для загрузки класса во время выполнения.

Вы можете, вероятно, по этой ссылке tutorials.jenkov.com/java-reflection/dynamic-class-loading-reloading.html еловых учебники по размышлении

Смежные вопросы