默认构造函数无法处理由隐式超级构造函数抛出的异常类型SocketException

时间:2014-07-10 21:59:39

标签: java android eclipse

我正在开发一款Android应用程序,它可以通过拨打电话并同时发送包来手动切换3G和4G。当我结束通话时,包将继续发送电话保持3G,但是当我按下按钮时,它会终止包。

我对大多数代码都很好,但是我得到了程序从其他人那里发送包,我对如何运行它有点困惑,特别是当我声明时我得到的这个错误字段套接字。我收到一条错误消息“默认构造函数无法处理由隐式超级构造函数抛出的异常类型SocketException。必须定义一个显式构造函数。”

这是我的包的类文件:

package com.example.derpphone;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;
import java.net.SocketAddress;
import java.util.TimerTask;
public class timer extends TimerTask {


    DatagramSocket socket = new DatagramSocket();
    @Override
    public void run() {     
                if (socket != null) {
                                   byte[] bytes = new byte[100];
                    SocketAddress serverAddress = new InetSocketAddress("131.179.176.74",
                            9998);
                    try {
                        DatagramPacket packet = new DatagramPacket(bytes,
                                bytes.length, serverAddress);
                        socket.send(packet);                    

                    } catch (Exception e) {

                    }
                }
            }
}

2 个答案:

答案 0 :(得分:1)

意味着

DatagramSocket socket = new DatagramSocket();

可以抛出SocketException,因为默认构造函数DatagramSocket()声明如此,它必须被处理或重新抛出,并且没有办法像这样处理它所以你需要一个构造函数它

将其更改为

DatagramSocket socket;

public timer throws SocketException { 
    this.socket = new DatagramSocket();
}

答案 1 :(得分:1)

将您的代码更改为:

DatagramSocket socket; 

public timer() throws Exception {
    socket = new DatagramSocket();
}

当你写:

DatagramSocket socket = new DatagramSocket();

没有默认构造函数,它相当于:

DatagramSocket socket;

public timer() {  
    super();
    socket = new DatagramSocket();
}

当DatagramSocket构造函数抛出异常时,需要捕获或声明它。