我正在开发一款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) {
}
}
}
}
答案 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构造函数抛出异常时,需要捕获或声明它。