这是正在发生的堰,因为正如我所看到的,一切都是正确的。如果你能帮助我,我会感恩的 这是代码:
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();
}
}
}
}
我不知道为什么会发生这种情况,如果您可以看到代码,我抛出并捕获每个异常......
这是屏幕显示的错误
答案 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);
....
}
}