无法强制转换为ThreadPoolTask​​Executor

时间:2015-07-22 10:43:56

标签: java spring runnable threadpoolexecutor

我必须编写一个接受套接字连接的类,并使用Spring将其传递给Handler类

我的听众课程

public class Listener {

    static Logger log = Logger.getLogger(Listener.class.getName());

    public static void main(String args[]) throws IOException {
    int port = 0;
        if (args.length < 1) {
            System.out.println("Usage: java -jar hovel.jar listenPortNumber");
            System.exit(1);
        } else {
            port = Integer.parseInt(args[0]);
        }
         ApplicationContext context = 
                 new ClassPathXmlApplicationContext("Beans.xml");
            ThreadPoolTaskExecutor taskExecutor = (ThreadPoolTaskExecutor) context.getBean("TCPHandler");

        ServerSocket serverSocket = new ServerSocket(port);
        System.out.println("Listening on TCP port " + port);
        for (;;) {
            Socket sock = serverSocket.accept();
            taskExecutor.execute(new TCPHandler(sock));

        }
    }

}

我的处理程序类是

public class TCPHandler implements Runnable {
    private Socket moduleSocket;



    public TCPHandler(Socket sock) {
        moduleSocket = sock;
    }

    public void run() {

    }

}

我的Bean.xml是

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">

   <bean id="TCPHandler" class="org.hovel.server.TCPHandler">
   <constructor-arg type="java.net.Socket">
        <null />
    </constructor-arg>
   </bean>
   <bean id="taskExecutor"
        class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
        <property name="corePoolSize" value="5" />
        <property name="maxPoolSize" value="10" />
        <property name="WaitForTasksToCompleteOnShutdown" value="true" />
    </bean>
</beans>

当我通过端口号时,我得到了这个错误
**

  

线程“main”中的异常java.lang.ClassCastException:   org.hovel.server.TCPHandler无法强制转换为   org.springframework.scheduling.concurrent.ThreadPoolTask​​Executor at   org.hovel.server.Listener.main(Listener.java:27)*

**

请帮帮我

1 个答案:

答案 0 :(得分:1)

您在这里请求TCPHandler bean:

context.getBean("TCPHandler")

不是一个ThreadPoolTaskExecutor,所以我不知道你为什么会这样。如果要检索执行程序,则应该提取那个 bean,其ID为taskExecutor

请注意,目前您实际上并没有以任何有用的方式使用TCPHandler bean,因为您正在TCPHandler方法中明确构建main