Java компиляция и запуск программы, которая содержит 2 класса в командной строке - PullRequest
0 голосов
/ 02 декабря 2018

У меня есть два файла для компиляции: Client.java и ClientHandler.java.

Я должен скомпилировать и запустить их в сценарии.Это сценарий компиляции, который я написал до сих пор:

del src\pack\*.class
set path="C:\Program Files\Java\jdk1.8.0_144\bin"
javac ClientHandler.java
javac Client.java
pause

Client иногда создает ClientHandler объектов, и в этой строке командная строка выдает ошибку.

C:\Users\maksg\Desktop\abc>set path="C:\Program Files\Java\jdk1.8.0_144\bin"
C:\Users\maksg\Desktop\abc>javac ClientHandler.java
C:\Users\maksg\Desktop\abc>javac Client.java
Client.java:44: error: cannot find symbol
                                                        Thread ch = new ClientHandler(s, din, dout, gracze);
                                                                        ^
  symbol: class ClientHandler
1 error

C:\Users\maksg\Desktop\abc>pause

Это мой скрипт для запуска программы:

set path="C:\Program Files\Java\jre1.8.0_144\bin"
start java Client gracz1 7000 7000 127.0.0.1
start java Client gracz2 6000 7000 127.0.0.1
start java Client gracz3 8000 6000 127.0.0.1
start java Client gracz4 9000 7000 127.0.0.1

Однако я даже не могу проверить, правильно ли работает скрипт, потому что я не смог скомпилировать эти 2 файла.

Вот исходные коды для обоих классов: Client

package a;

import java.io.DataInputStream;
import java.io.DataOutputStream;

import java.net.ServerSocket;
import java.net.Socket;
import java.util.HashMap;


public class Client extends Thread{

    static String nazwa;
    static int portMoj;
    static int portInnegoKlienta;
    static String ip;
    static HashMap<Integer, String> gracze;
    static String liczbaPrzeciwnika;
    static int portPrzeciwnika;
    static Thread ch;

    public Client(String[] args) {
        gracze = new HashMap<>();
        nazwa = args[0];
        portMoj = Integer.parseInt(args[1]);
        portInnegoKlienta = Integer.parseInt(args[2]);
        ip = args[3];
    }

    public static void main(String[] args) {
        new Client(args);

        Thread t = new Thread(new Runnable() {          
            @Override
            public void run() {
                try {
                ServerSocket serverSocket = new ServerSocket(portMoj);
                    while(true) {
                            Socket s = serverSocket.accept();
                            DataInputStream din = new DataInputStream(s.getInputStream());
                            DataOutputStream dout = new DataOutputStream(s.getOutputStream());
                            Thread ch = new ClientHandler(s, din, dout, gracze);
                            ch.start();                         
                    }
                }catch(Exception ex) {
                    System.out.println(ex);
                    ex.printStackTrace();
                }

            }
        });
        t.start();

        try {
            System.out.println("Uruchomiony Klient " + nazwa);          
            System.out.println("Moj port: " + args[1]);
            System.out.println("Port klienta wpr.: " + args[2]);

            gracze.put(Integer.parseInt(args[1]), nazwa);

            Socket socket = null;
            DataInputStream din = null;
            DataOutputStream dout = null;

            boolean skanuj=true;
            while(skanuj){
                try{
                    socket = new Socket(ip, portInnegoKlienta);

                    System.out.println("Nawiazywanie polaczenia z: " + portInnegoKlienta);

                    din = new DataInputStream(socket.getInputStream());
                    dout = new DataOutputStream(socket.getOutputStream());

                    skanuj=false;
                }
                catch(Exception e){
                    System.out.println("Polaczenie nieudane, ponawiam polaczenie");
                    try{
                        Thread.sleep(2000);//co 2 sek
                    }
                    catch(InterruptedException ie){
                        ie.printStackTrace();
                    }
                }
            }

            System.out.println("Wysylam join do...: " + portInnegoKlienta);

            dout.writeUTF("join " + nazwa + " " + portMoj+"");
            dout.flush();


            gracze.put(portMoj, nazwa);

            socket = new Socket(ip, portInnegoKlienta);
            System.out.println("Nawiazywanie polaczenia z: " + portInnegoKlienta);
            din = new DataInputStream(socket.getInputStream());
            dout = new DataOutputStream(socket.getOutputStream());
            Thread.sleep(1000);

            String liczbaWylosowana = ((int)(Math.random()*10))+"";
            String mojPortString = portMoj+"";
            dout.writeUTF("game " + liczbaWylosowana + " " + mojPortString);
            dout.flush();

            socket = new Socket(ip, portInnegoKlienta);
            System.out.println("Nawiazywanie polaczenia z: " + portInnegoKlienta);
            din = new DataInputStream(socket.getInputStream());
            dout = new DataOutputStream(socket.getOutputStream());
            Thread.sleep(1000);

        } catch(Exception e) {
            System.out.println(e);
            e.printStackTrace();
        }
    }
}

и ClientHandler:

package a;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Set;

class ClientHandler extends Thread{ 

    DataInputStream din; 
    DataOutputStream dout; 
    Socket socket;
    HashMap<Integer, String> gracze;

    public ClientHandler(Socket socket, DataInputStream din, DataOutputStream dout, HashMap<Integer, String> gracze){ 
        this.socket = socket; 
        this.din = din; 
        this.dout = dout;
        this.gracze = gracze;

    } 

    public void run() {
        String[] komunikaty;
        String msgin; 

            try {
                msgin = din.readUTF();
                komunikaty = msgin.split(" ");

                if(komunikaty[0].equals("join")){
                    System.out.println("Uzyskalem komende join");
                    String nazwaPartnera = komunikaty[1];
                    String portPartnera = komunikaty[2];
                    System.out.println("Polaczyl sie ze mną: " + nazwaPartnera
                             + ", na porcie: " + portPartnera);
                    gracze.put(Integer.parseInt(portPartnera), nazwaPartnera);

                    String wszyscyGracze = "aktywni ";
                    Set<Integer> set = gracze.keySet();
                    for(int i: set) {
                        wszyscyGracze += i + " " + gracze.get(i) + " ";
                    }
                    for(int i : set) {
                        Socket s = new Socket(socket.getInetAddress(), i);
                        dout = new DataOutputStream(s.getOutputStream());
                        dout.writeUTF(wszyscyGracze);
                        dout.flush();
                        s.close();
                    }
                }
                if(komunikaty[0].equals("aktywni")) {
                    System.out.println("Uzyskalem komende aktywni");
                    System.out.println("Lista aktywnych graczy: ");
                    gracze.clear();                 
                    for(int i = 1; i < komunikaty.length-1; i+=2) {
                        gracze.put(Integer.parseInt(komunikaty[i]), komunikaty[i+1]);
                    }
                    Set<Integer> set = gracze.keySet();
                    for(int i : set) {
                        System.out.println(i + " " + gracze.get(i));
                    }
                }
                if(komunikaty[0].equals("game")) {
                    System.out.println("Uzyskalem komende game");
                    String liczbaGraczaWyzywajacego = komunikaty[1];
                    int portGraczaWyzywajacego = Integer.parseInt(komunikaty[2]);
                    String nazwaGraczaWyzywajacego = gracze.get(portGraczaWyzywajacego);
                    Set<Integer> set = gracze.keySet();
                    ArrayList<String> rezultatyMeczy = new ArrayList<>();

                    for(int i : set) {                      
                        Socket s = new Socket(socket.getInetAddress(), i);
                        dout = new DataOutputStream(s.getOutputStream());
                        if(!(i == portGraczaWyzywajacego)) {
                            int liczbaPrzeciwnika = (int)(Math.random()*10);
                            if(((Integer.parseInt(liczbaGraczaWyzywajacego)+liczbaPrzeciwnika)%2) == 0) {
                                rezultatyMeczy.add("Wygralem z " + gracze.get(i));
                                dout.writeUTF("challenged " + portGraczaWyzywajacego + " " + nazwaGraczaWyzywajacego + " 0");
                                dout.flush();
                            } else {
                                rezultatyMeczy.add("Przegralem z " + gracze.get(i));
                                dout.writeUTF("challenged " + portGraczaWyzywajacego + " " + nazwaGraczaWyzywajacego + " 1");
                                dout.flush();
                            }
                        }
                        s.close();
                        dout.close();
                    }
                    String wiadomoscZwrotnaDoWyzywajacego = "results ";
                    for(int i = 0; i < rezultatyMeczy.size(); ++i) {
                        wiadomoscZwrotnaDoWyzywajacego += rezultatyMeczy.get(i) + " ";
                    }
                    Socket zwrotny = new Socket(socket.getInetAddress(), portGraczaWyzywajacego);
                    dout = new DataOutputStream(zwrotny.getOutputStream());
                    dout.writeUTF(wiadomoscZwrotnaDoWyzywajacego);
                    dout.flush();
                    zwrotny.close();
                    dout.close();
                }
                if(komunikaty[0].equals("challenged")) {
                    System.out.println("Uzyskalem komende challenged");
                    System.out.println("Zostalem wyzwany przez: " + komunikaty[2]);
                    if(komunikaty[3].equals("0")) {
                        System.out.println("Przegralem");
                    } else {
                        System.out.println("Wygralem");
                    }
                }
                if(komunikaty[0].equals("results")) {
                    System.out.println("Uzyskalem komende results");
                    System.out.println("Moje mecze:");
                    for(int i = 1; i < komunikaty.length-1; i+=3) {
                        System.out.println(komunikaty[i] + " " + komunikaty[i+1] + " " + komunikaty[i+2] + " ");
                    }
                }

                socket.close();
                din.close();
                dout.close();
                msgin = "";
                komunikaty = null;
            } catch (IOException e) { 
                //e.printStackTrace(); 
            } 
   }

}

Ответы [ 3 ]

0 голосов
/ 03 декабря 2018

Хорошо, эти классы находятся в пакетах, но экраны командной строки не указывают, что они есть в папках, соответствующих их пакетам.Вместо того, чтобы пытаться объяснить вам пакеты, я рекомендую вам удалить строки 'package' из обоих исходных файлов и повторить попытку.

0 голосов
/ 03 декабря 2018

Хорошо, спасибо, ребята.Единственное, что мне нужно было сделать, это удалить строку

package a;

в обоих файлах.

0 голосов
/ 03 декабря 2018

Вам нужно поместить оба файла в каталог с именем a, чтобы соответствовать имени пакета.

...