【问题标题】:Exception Exception is not compatible with throws clause in Server.main(String[]) [duplicate]异常异常与 Server.main(String[]) 中的 throws 子句不兼容 [重复]
【发布时间】:2014-03-15 15:49:44
【问题描述】:

我正在通过以下链接在 Eclipse Indigo 上运行 Lip 阅读代码: https://github.com/sagioto/LipReading/blob/master/lipreading-core/src/main/java/edu/lipreading/WebFeatureExtractor.java

package main.java.edu.lipreading;

import com.googlecode.javacpp.BytePointer;
import com.googlecode.javacv.cpp.opencv_core;
import main.java.edu.lipreading.vision.AbstractFeatureExtractor;
import main.java.edu.lipreading.vision.NoMoreStickersFeatureExtractor;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.nio.SelectChannelConnector;
import org.eclipse.jetty.websocket.WebSocket;
import org.eclipse.jetty.websocket.WebSocketHandler;

import javax.servlet.http.HttpServletRequest;
import java.io.ByteArrayOutputStream;
import java.util.List;
import java.util.logging.Logger;

import static com.googlecode.javacv.cpp.opencv_core.CV_8UC1;
import static com.googlecode.javacv.cpp.opencv_core.cvMat;
import static com.googlecode.javacv.cpp.opencv_highgui.cvDecodeImage;

/**
 * Created with IntelliJ IDEA.
 * User: Sagi
 * Date: 25/04/13
 * Time: 21:47
 */
public class WebFeatureExtractor extends Server {

    private final static Logger LOG = Logger.getLogger(WebFeatureExtractor.class.getSimpleName());
    private final static AbstractFeatureExtractor fe = new NoMoreStickersFeatureExtractor();

    public WebFeatureExtractor(int port) {
        SelectChannelConnector connector = new SelectChannelConnector();
        connector.setPort(port);
        addConnector(connector);

        WebSocketHandler wsHandler = new WebSocketHandler() {
            public WebSocket doWebSocketConnect(HttpServletRequest request, String protocol) {
                return new FeatureExtractorWebSocket();
            }
        };
        setHandler(wsHandler);
    }

    /**
     * Simple innerclass that is used to handle websocket connections.
     *
     * @author jos
     */
    private static class FeatureExtractorWebSocket implements WebSocket, WebSocket.OnBinaryMessage, WebSocket.OnTextMessage {

        private Connection connection;


        public FeatureExtractorWebSocket() {
            super();
        }

        /**
         * On open we set the connection locally, and enable
         * binary support
         */
        @Override
        public void onOpen(Connection connection) {
            LOG.info("got connection open");
            this.connection = connection;
            this.connection.setMaxBinaryMessageSize(1024 * 512);
        }

        /**
         * Cleanup if needed. Not used for this example
         */
        @Override
        public void onClose(int code, String message) {
            LOG.info("got connection closed");
        }

        /**
         * When we receive a binary message we assume it is an image. We then run this
         * image through our face detection algorithm and send back the response.
         */
        @Override
        public void onMessage(byte[] data, int offset, int length) {
            //LOG.info("got data message");
            ByteArrayOutputStream bOut = new ByteArrayOutputStream();
            bOut.write(data, offset, length);
            try {
                String result = convert(bOut.toByteArray());
                this.connection.sendMessage(result);
            } catch (Exception e) {
                LOG.severe("Error in facedetection, ignoring message:" + e.getMessage());
            }
        }

        @Override
        public void onMessage(String data) {
            LOG.info("got string message");
        }
    }
    public static String convert(byte[] imageData) throws Exception {
        opencv_core.IplImage originalImage = cvDecodeImage(cvMat(1, imageData.length, CV_8UC1, new BytePointer(imageData)));
        List<Integer> points = fe.getPoints(originalImage);
        if(points == null)
            return "null";
        String ans = "";
        for (Integer point : points) {
            ans += point + ",";
        }
        return ans;
    }



    /**
     * Start the server on port 999
     */
    public static void main(String[] args) throws Exception {
        WebFeatureExtractor server = new WebFeatureExtractor(9999);
        server.start();
        server.join();
    }
}

在下面一行:

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

我收到以下错误:

Exception Exception is not compatible with throws clause in Server.main(String[])

请帮我解决这个问题。

【问题讨论】:

    标签: java exception throws


    【解决方案1】:

    您需要检查两个条件。 1)在接口中声明方法时,您需要为该方法添加 throws 异常,与实现该方法的接口实现类类似。 例如 服务.java

    @Component
    public interface UserService {
    
        User getUser(Login login) throws Exception;
        }
    
    serviceimpl.java
    public User getUser(Login login)throws Exception 
        {   
    
           }
    

    2) 通过执行上述语句,错误仍然没有消失。确保保存这两个文件。

    【讨论】:

      【解决方案2】:

      服务器 API 是否为自己处理所有异常。为什么不尝试删除代码中的抛出。我知道这不是很好的编程习惯,但可能会解决问题。

      【讨论】:

        【解决方案3】:

        问题在于您正在扩展的Server已经包含一个public static void main(String[]) 方法没有具有相同的throws 声明。我没有看它,但我敢打赌那个方法根本不会抛出任何东西。

        一种解决方案是删除 main 方法中的 throws 子句,并改用 try-catch。

        编辑:为什么不能在您的案例中添加不同的 throws 子句。

        让我们假设以下场景:

        class A {
            public static void foo() throws SomeException { ... }
        }
        
        class B extends A {
            public static void foo() throws DifferentException { ... }
        }
        

        Java 标准说您隐藏 A.foo() 方法(或至少尝试隐藏)。问题是,只有如果B.foo() 中的 throws 子句已经包含A.foo() 的子句中,您才可以这样做。所以对于上述场景,你是完全合法的只有当 DifferentExceptionSomeException 的子类。否则编译器会大喊大叫。

        【讨论】:

        • 或者只是将新的main 放在不同的类中。
        • 当然,有很多方法可以解决这个问题。
        【解决方案4】:

        我遇到了同样的问题,在我的例子中,我从一个没有声明抛出异常的接口实现了一个方法。

        在您的情况下,我猜想 Server 类也有一个没有引发异常的 main 方法。要快速解决。我会声明 Server.main 抛出异常。

        这个链接帮助了我

        What are reasons for Exceptions not to be compatible with throws clauses?

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-10-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-06-23
          相关资源
          最近更新 更多