Я использую Java, разрабатываю в Eclipse студенческий проект, в котором мне нужно построить простую распределенную систему.Я решил смоделировать это на одном компьютере с помощью нескольких процессов, однако, похоже, что-то делаю не так.
Итак, у меня есть класс Test, в котором я пытаюсь использовать ProcessBuilder для создания и выполнения трех процессов, выполняющихОсновным игроком другого класса.Когда я запускаю основной Player (с 3 аргументами) сам по себе, он, кажется, работает нормально (хотя он не прогрессирует, потому что ожидает 2 других игроков), но когда я пытаюсь запустить его через Test, я просто получаю следующий вывод:
Working dir: C:\Users\Jeremy Canning\git\cs-3700\cs-3700
Enter number of games to play:
10
[java, -cp, bin, Player, 228.5.6.7, 6789, 10]
Exception in thread "main" Exception in thread "main" Exception in thread "main"
java.lang.Error: Unresolved compilation problem:
java.lang.Error: Unresolved compilation problem:
at Player.main(Player.java:164)
at Player.main(Player.java:164)
java.lang.Error: Unresolved compilation problem:
at Player.main(Player.java:164)
Каждый процесс выдает одну и ту же ошибку: Exception in thread "main" java.lang.Error: Unresolved compilation problem: at Player.main(Player.java:164)
Поскольку эта ошибка возникает только тогда, когда я запускаю ее через Test.main
, кажется, что проблема компиляции лежит в этом методе.Я полагаю, что я неправильно строю свои процессы, но я не смог диагностировать то, что я делаю, с какой-то определенностью в своем собственном исследовании.Если кто-то может заметить мою ошибку в Test.main
, вы будете мне очень полезны.
public class Test {
public static String programName = "/cs-3700/src/rockPaperScissors/Player.java";
public static String arg0 = "228.5.6.7";
public static String arg1 = "6789";
public static void main(String[] args) {
String workingDir = System.getProperty("user.dir");
System.out.println("Working dir: " + System.getProperty("user.dir"));
Scanner kb = new Scanner(System.in);
System.out.println("Enter number of games to play: ");
String arg2 = String.valueOf(kb.nextInt());
String[] exec_cmd = {"java", "-cp", "bin", "Player", arg0, arg1, arg2};
try {
String[] cmd = {"javac.exe", "Player.java"};
ProcessBuilder compile = new ProcessBuilder(cmd);
compile.directory(new File(workingDir));
//System.out.println(compile.directory().getAbsolutePath());
Process p = compile.start();
p.waitFor();
p.destroy();
} catch (IOException | InterruptedException e) {
System.out.println("Error");
e.printStackTrace();
}finally{
try{
ProcessBuilder pb = new ProcessBuilder(exec_cmd);
pb.directory(new File(workingDir));
pb.inheritIO();
System.out.println(Arrays.toString(pb.command().toArray()));
//System.out.println(pb.directory().getAbsolutePath());
Process[] players = {pb.start(), pb.start(), pb.start()};
for(Process player : players) {
player.waitFor();
}
}catch(IOException | InterruptedException e){
e.printStackTrace();
}
}
kb.close();
}
}
РЕДАКТИРОВАТЬ: Я собираюсь добавить свой код для основного метода класса Player здесь для справки.Первая строка (объявление main) - это строка 164, указанная в приведенной выше ошибке.
public static void main(String[] args) { // Line 164
if(args.length == 3){
int port = Integer.parseInt(args[1]);
int numGames = Integer.parseInt(args[2]);
Player player = null;
try {
InetAddress group = InetAddress.getByName(args[0]);
player = new Player(group, port);
} catch (UnknownHostException e) {
e.printStackTrace();
}
player.multipleGames(numGames);
}else{System.out.println("No arguments");}
}