2

我正在通过以下链接在 Eclipse Indigo 上运行唇读代码: 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[])

请帮我解决这个问题。

4

4 回答 4

1

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

@Component
public interface UserService {

    User getUser(Login login) throws Exception;
    }

serviceimpl.java
public User getUser(Login login)throws Exception 
    {   

       }

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

于 2017-09-01T06:24:46.833 回答
0

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

于 2014-03-15T16:53:12.323 回答
0

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

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

这个链接帮助了我

异常与 throws 子句不兼容的原因是什么?

于 2015-02-24T15:07:25.433 回答
0

问题是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()方法(或者至少试图隐藏)。问题是,只有throws 子句 inB.foo()已经包含A.foo(). 因此,对于上述情况,只有当 DifferentException是 的子类时,您才是完全合法的SomeException。否则编译器会大喊大叫。

于 2014-03-15T18:07:21.713 回答