为什么我会得到这个“未报告的例外”?

时间:2013-11-15 15:36:41

标签: java ubuntu ioexception

这是正在发生的堰,因为正如我所看到的,一切都是正确的。如果你能帮助我,我会感恩的 这是代码:

import java.io.*;
import java.net.*;
import java.util.*;
import javax.swing.*;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.ResultSet;
import java.sql.Statement;

public class Server{

private static HashSet<String> users = new HashSet<String>();
//private static HashSet<String> passwords = new HashSet<String>();
private static HashSet<PrintWriter> writers = new HashSet<PrintWriter>();
private static final int port = 9001;

private static class SocketHandler extends Thread{

    PrintWriter output;
    BufferedReader input;
    String name;
    //String pass;
    Socket socket;

    public SocketHandler(Socket sc){
        this.socket = sc;
    }

    public void run(){

    input = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        output = new PrintWriter(socket.getOutputStream(), true);

        try{

            while(true){

                output.println("SUBMITNAME");
                name = input.readLine();
                if(name == null){
                    return;
                }
                synchronized(users){
                    if(!users.contains(name)){
                        users.add(name);
                        break;
                    }
                }
            }

            output.println("NAMEACCEPTED");
            writers.add(output);

            while(true){

                String in = input.readLine();
                if(in == null){
                    return;
                }
                for(PrintWriter writer : writers){
                    writer.println("MESSAGE: " + name + ": " + in);
                }
            }

        }catch(IOException e){
            System.out.println(e);
        }finally{

            if(name != null){
                users.remove(name);
            }
            if(output != null){
                writers.remove(output);
            }
            try{
                socket.close();

            }catch(IOException e){
                System.out.println(e);
            }

        }
    }
}

public static void main(String[]args) throws Exception{

    ServerSocket listener = new ServerSocket(port);
    System.out.println("The server is now running...");

    try{

        while(true){
            new SocketHandler(listener.accept()).start();
        }

    }catch(IOException e){
        System.out.println(e);
    }finally{
        listener.close();
    }

    Connection con = null;
    ResultSet rs = null;
    Statement s = null;

    try{

        Class.forName("org.sqlite.JDBC");
con = DriverManager.getConnection("jdbc:sqlite:/home/julio/Documents/Prueba.db");
        s = con.createStatement();
        rs = s.executeQuery("E-MAIL DATABASE");
        while(rs.next()){

    System.out.println("Enter your email adress: " + rs.getString("name"));

        }

    }catch(Exception e){
        e.printStackTrace();
    }finally{
        try{
            rs.close();
            s.close();
            con.close();
        }catch(Exception e){
            e.printStackTrace();
        }
    }
}

}

我不知道为什么会发生这种情况,如果您可以看到代码,我抛出并捕获每个异常......

This is the error that displays on screen

这是屏幕显示的错误

2 个答案:

答案 0 :(得分:1)

检查出现这些错误的两行:它们位于try块之外。

input = new BufferedReader(new InputStreamReader(socket.getInputStream())); // error 1: not in the try block!
output = new PrintWriter(socket.getOutputStream(), true); // error 2: not in the try block!

try {

    // ... other code ...

} catch(IOException e) {
    System.out.println(e);
} finally {

    if (name != null) {
        users.remove(name);
    }
    if (output != null) {
        writers.remove(output);
    }
    try {
        socket.close();

    } catch (IOException e) {
        System.out.println(e);
    }

}

您应该将作业放在try区块内。

答案 1 :(得分:0)

在try块内分配输入和输出。

public void run(){
    try{
        input = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        output = new PrintWriter(socket.getOutputStream(), true);

        ....

}

}