有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java线程未中断/未停止

我正在尝试创建一个点对点语音聊天程序,该程序试图在程序开始时在两个对等方之间建立连接

我创建了两个线程,一个线程Call处理用户呼叫某人的请求,另一个线程receiveCall处理输入呼叫

我想做的是,当你接到一个电话或打电话给某人时,你会“杀死”另一个线程,因为它达到了它的目的

创建两个线程的方法

public Peer(String[] args) {
        port = Integer.parseInt(args[0]);
        stateHandler = new StateHandler();
        scanner = new Scanner(System.in);

        call = new Thread(new ReceiveCall());
        call.start();
        receiveCall = new Thread(new Call());
        receiveCall.start();

    }

{}方法:

    class Call implements Runnable {

        @Override
        public void run() {
            while (!Thread.currentThread().isInterrupted()) {
                try {
                    System.out.print(">");
                    String ip;
                    int port;
                    DataOutputStream output;
                    String call;

                    call = scanner.nextLine();

                    while (!call.contains("call") && findMatches(call, " ") != 2 && !callFlag) {
                        System.out.println("Usage: call <ip> <port>");
                        call = scanner.nextLine();
                    }

                    String[] parts = call.split(" ");
                    ip = parts[1];
                    port = Integer.parseInt(parts[2]);

                    socket = new Socket(ip, port);

                    //Send invite
                    output = new DataOutputStream(socket.getOutputStream());
                    output.writeUTF("INVITE");

                    stateHandler.manageStates(StateHandler.StateEvent.CALLING, socket);
                } catch (IOException e) {
                    Thread.currentThread().interrupt();
                }
            }        
        }
    }

{}方法:

class ReceiveCall implements Runnable {

    @Override
    public void run() {

        DataInputStream inputStream;
        DataOutputStream outputStream = null;
        String answer, msg = null;

        try {
            serverSocket = new ServerSocket(port);
        } catch (IOException e) {
            e.printStackTrace();
        }

        //Accept connection
        try {
            socket = serverSocket.accept();
            call.interrupt(); //Here I want to interrupt the other thread
            inputStream = new DataInputStream(socket.getInputStream());
            outputStream = new DataOutputStream(socket.getOutputStream());
            msg = inputStream.readUTF();
        } catch (IOException e) {
            e.printStackTrace();
        }

        if (!msg.equals("INVITE")) {

        }

        System.out.println(socket.getInetAddress().toString() + " is calling you! Answer? (Y/N)");

        synchronized (scanner) {
            answer = scanner.nextLine();
        }

        if (!answer.equals("Y")) {
            System.out.println("Ready to receive a call or call...");
        }

        try {
            outputStream.writeUTF("TRO");
        } catch (IOException e) {
            e.printStackTrace();
        }

        stateHandler.manageStates(StateHandler.StateEvent.RECEIVE_CALL, socket);

    }
}

程序是基于状态的,因此当其中一个线程完成时,应该转到另一个状态并在那里执行相应的代码


共 (0) 个答案