Java Try with resources无法使用';不是一个声明';错误

Java Try with resources无法使用';不是一个声明';错误,java,linux,Java,Linux,我今天买了一本书,内容是关于“java中的并行和分布式应用程序”及其2014年出版的内容 我运行Kali Linux 64位,在编译时遇到了一系列错误,如下面的视图示例。总共大约有17个错误 Server.java:7: '{' expected try (ServerSocket serverSocket = new ServerSocket(27015)) { ^ Server.java:88: not a statement } cat

我今天买了一本书,内容是关于“java中的并行和分布式应用程序”及其2014年出版的内容

我运行Kali Linux 64位,在编译时遇到了一系列错误,如下面的视图示例。总共大约有17个错误

Server.java:7: '{' expected
        try (ServerSocket serverSocket = new ServerSocket(27015)) {
           ^
Server.java:88: not a statement
        } catch(Exception e) {
Server.java:96: reached end of file while parsing
}
 ^
我从书中得到了这个例子,写于2014年,所以我认为不应该有任何错误,但它不会起作用

就我所见,try-catch块还可以,而带有资源的catch块在本书的示例中是明确给出的

据我所知,在Kali中,Linux是预安装了OpenJDK的,可能是错误,但我不确定。我希望这是一个适合此类问题的地方,有人可以帮我检查代码

import java.net.*;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Date;

public class Server {

    public static void main(String[] args) {

        try (ServerSocket serverSocket = new ServerSocket(27015)) {

            while(true) {

                System.out.println("[info] Server in listen mode...");

                try {

                    TCPSocket tcpSocket = new TCPSocket(serverSocket.accept());
                    new Slave(tcpSocket);

                } catch(Exception e) {

                    //error handling

                }

            }

        } catch(Exception e) {

            // error handling

        }

    }

}

// Class Server Ende

class Slave extends Thread {

    private TCPSocket socket;

    public Slave(TCPSocket socket) {

        this.socket = socket;
        this.start();

    }

    public void run() {

        try(ServerSocket s = socket) {      

            while(true) {

                String request = s.receiveLine();

                if(request != null) {

                    try {

                        int secs = Integer.parseInt(request);
                        Thread.sleep(secs * 1000);

                    } catch(InterruptedException e) {

                        // error handling
                        System.out.println(e);

                    }

                    s.sendLine(request);

                } else {

                    break;

                }

            }

        } catch(Exception e) {

            System.out.println(e);

        }

        System.out.println("[info] Connection closed");

    }

}
错误

Server.java:7: '{' expected
    try (ServerSocket serverSocket = new ServerSocket(27015)) {

表示java无法识别该类型的语句。在Java1.7中引入了Try-with-resources。我怀疑您正在使用JDK1.6或之前的版本来编译

您是针对1.6字节码还是使用JDK1.6?是的:java版本“1.6.0"OpenJDK运行时环境(IcedTea6 1.13.6)(6b34-1.13.6-1~deb7u1)OpenJDK 64位服务器虚拟机(构建23.25-b01,混合模式)使用不到3年的java版本如何?至少使用Java 7来使用try with resources语句。try with resources是在1.7中引入的,不知道-即使无法通过apt getI获得,也应该不太难获得它。我已经更新到1.8,但得到了一些相同的错误:Java版本“1.8.0_51”Java(TM)SE运行时环境(构建1.8.0_51-b16)Java热点(TM)64位服务器虚拟机(构建25.51-b03,混合模式)您确定使用的是java 1.8吗?在命令行上执行
java-version
。另外,您是如何构建javac/maven/ant/gradle/eclispe的?@BrainWorx您确定会遇到同样的错误吗?不是关于不兼容类型的吗?对不起,我太笨了,TCPSocket类是几页之后的。但我认为每个人都会在那个类之前寻找包含在另一个类中的类,而不是几页之后。对不起,我现在有Java1.8,也可以:D