Кодовое имя один java.net.SocketTimeoutException

Я работаю над проектом Codename One, в котором мне нужно проверить определенные адреса. Если адрес не существует, переменная в моем коде с именем lectura должна иметь значение 404. Однако, когда я нахожу несуществующий адрес, мой код останавливается и отображает на экране сообщение, в котором говорится, что java.net.SocketTimeoutException с опции отменить или повторить попытку. Мне нужно, чтобы моя программа знала, что адрес не существует, и чтобы двигаться дальше, а не останавливаться. Мой код:

public int readCNO(String cantidad, int number){


    ConnectionRequest r3 = new ConnectionRequest();
    r3.setUrl("http://" + ipZona + "/arduino/" + cantidad + "!" + type + "/" + Integer.toString(number));

    r3.setPost(false);
    r3.setDuplicateSupported(true);
    r3.setTimeout(100);
    NetworkManager.getInstance().addToQueueAndWait(r3);
    r3.addResponseListener(new ActionListener()
    {

        public void actionPerformed(ActionEvent ev)
        {
            try
            {
                NetworkEvent event = (NetworkEvent) ev;
                byte[] data= (byte[]) event.getMetaData();
                String decodedData = new String(data,"UTF-8");
                System.out.println(decodedData);
                lectura = Integer.parseInt(decodedData.trim());

            } catch (Exception e)
            {
                //ex.printStackTrace();
                lectura = 404;
            }

        }


    });
    NetworkManager.getInstance().addToQueue(r3);
    //NetworkManager.getInstance().killAndWait(r3);



    return lectura;
}

Помощь очень ценится!

Дэйвид.

После этого отображается полное исключение, но оно не относится ни к одному из моих классов, ни к тому, где находится приведенный выше код, ни к тому, где он вызывается.

java.net.SocketTimeoutException: connect timed out
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339)
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200)
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
    at java.net.Socket.connect(Socket.java:579)
    at sun.net.NetworkClient.doConnect(NetworkClient.java:175)
    at sun.net.www.http.HttpClient.openServer(HttpClient.java:432)
    at sun.net.www.http.HttpClient.openServer(HttpClient.java:527)
    at sun.net.www.http.HttpClient.<init>(HttpClient.java:211)
    at sun.net.www.http.HttpClient.New(HttpClient.java:308)
    at sun.net.www.http.HttpClient.New(HttpClient.java:326)
    at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:996)
    at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:932)
    at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:850)
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1300)
    at java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:468)
    at com.codename1.impl.javase.JavaSEPort.getResponseCode(JavaSEPort.java:4557)
    at com.codename1.io.ConnectionRequest.performOperation(ConnectionRequest.java:330)
    at com.codename1.io.NetworkManager$NetworkThread.run(NetworkManager.java:261)
    at com.codename1.impl.CodenameOneThread.run(CodenameOneThread.java:176)
java.net.SocketTimeoutException: connect timed out
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339)
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200)
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
    at java.net.Socket.connect(Socket.java:579)
    at sun.net.NetworkClient.doConnect(NetworkClient.java:175)
    at sun.net.www.http.HttpClient.openServer(HttpClient.java:432)
    at sun.net.www.http.HttpClient.openServer(HttpClient.java:527)
    at sun.net.www.http.HttpClient.<init>(HttpClient.java:211)
    at sun.net.www.http.HttpClient.New(HttpClient.java:308)
    at sun.net.www.http.HttpClient.New(HttpClient.java:326)
    at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:996)
    at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:932)
    at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:850)
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1300)
    at java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:468)
    at com.codename1.impl.javase.JavaSEPort.getResponseCode(JavaSEPort.java:4557)
    at com.codename1.io.ConnectionRequest.performOperation(ConnectionRequest.java:330)
    at com.codename1.io.NetworkManager$NetworkThread.run(NetworkManager.java:261)
    at com.codename1.impl.CodenameOneThread.run(CodenameOneThread.java:176)

person StOchastiC_    schedule 21.04.2014    source источник
comment
Недавно я познакомился с парнем по имени Дэвид. Чувак был полным придурком.   -  person But I'm Not A Wrapper Class    schedule 21.04.2014
comment
Можете ли вы сказать нам, в какой строке происходит SocketTimeoutException? Скорее всего, вы получаете это исключение вне блока try/catch. Что такое lectura до того, как вы установили его на 404? Убедитесь, что вы не возвращаете пустую переменную примитивного типа данных.   -  person But I'm Not A Wrapper Class    schedule 21.04.2014
comment
Уверяю вас, это не я, я стараюсь быть хорошим парнем! Точное исключение я опубликую как ответ на вопрос, потому что он слишком длинный и не подходит в качестве комментария.   -  person StOchastiC_    schedule 21.04.2014
comment
Просто отредактируйте исходный вопрос. Не публикуйте это как ответ. Кроме того, убедитесь, что вы указали нам, на какой именно строке находится исключение. Не просто показывайте нам трассировку стека.   -  person But I'm Not A Wrapper Class    schedule 21.04.2014
comment
lectura просто определяется как int lectura; прежде чем он будет использован в коде, показанном выше. Я отредактировал вопрос, но в трассировке стека я не смог найти никаких ссылок на мои классы, ни на то, где находится код, ни где он вызывается.   -  person StOchastiC_    schedule 21.04.2014
comment
Я думаю, что нашел свою проблему и почему моя попытка поймать это не улавливает. В пакете com.codenameone1.io.ConnectionRequest есть строка кода, которая открывает диалог. То есть, if(Display.isInitialized() && Dialog.show(Exception, err.toString() + : for URL + url + \n + err.getMessage(), Retry, Cancel)) { retry(); } это сообщение, которое я получаю и которое останавливает мое приложение. Однако я не могу редактировать этот файл, кажется, он доступен только для чтения, возможно, вы знаете какое-нибудь решение? Дэйвид   -  person StOchastiC_    schedule 22.04.2014


Ответы (1)


Я решил свою проблему с помощью ответа из этого сообщения перехват исключения неизвестного хоста в кодовом имени one, код такой:

NetworkManager.getInstance().addErrorListener(new ActionListener() {
    public void actionPerformed(ActionEvent evt) {
        //handle your error here consume the event
        evt.consume();
    }
});
person StOchastiC_    schedule 21.04.2014