Java J2ME中发送SMS时出现空指针异常
我正试图从J2ME应用程序发送SMS,但收到NullPointer异常。这是我的全部代码。如果你有任何想法,请帮助我。非常感谢…我正在使用MessageConnection在J2ME中发送短信。请纠正我哪里错了Java J2ME中发送SMS时出现空指针异常,java,java-me,sms,send,sms-gateway,Java,Java Me,Sms,Send,Sms Gateway,我正试图从J2ME应用程序发送SMS,但收到NullPointer异常。这是我的全部代码。如果你有任何想法,请帮助我。非常感谢…我正在使用MessageConnection在J2ME中发送短信。请纠正我哪里错了 import javax.microedition.io.*; import javax.microedition.lcdui.*; import javax.microedition.midlet.MIDlet; import javax.wireless.messaging.*;
import javax.microedition.io.*;
import javax.microedition.lcdui.*;
import javax.microedition.midlet.MIDlet;
import javax.wireless.messaging.*;
public class SendSms extends MIDlet implements CommandListener {
Display display;
private TextField toWhom;
private TextField message;
private Alert alert;
private Command send, exit;
MessageConnection clientConn;
private Form compose;
public SendSms() {
display = Display.getDisplay(this);
compose = new Form("Compose Message");
toWhom = new TextField("To", "", 10, TextField.PHONENUMBER);
message = new TextField("Message", "", 600, TextField.ANY);
send = new Command("Send", Command.BACK, 0);
exit = new Command("Exit", Command.SCREEN, 5);
compose.append(toWhom);
compose.append(message);
compose.addCommand(send);
compose.addCommand(exit);
compose.setCommandListener(this);
}
public void startApp() {
display.setCurrent(compose);
}
public void pauseApp() {
}
public void destroyApp(boolean unconditional) {
notifyDestroyed();
}
public void commandAction(Command cmd, Displayable disp) {
if (cmd == exit) {
destroyApp(false);
}
if (cmd == send) {
String mno = toWhom.getString();
String msg = message.getString();
if (mno.equals("")) {
alert = new Alert("Alert");
alert.setString("Enter Mobile Number!!!");
alert.setTimeout(Alert.FOREVER);
display.setCurrent(alert);
} else {
try {
clientConn = (MessageConnection) Connector.open("sms://" + mno);
} catch (Exception e) {
alert = new Alert("Alert");
// alert.setString("Unable to connect to Station because of network problem");
alert.setString(e.getMessage()+"|"+e.toString());
System.out.println(e.getMessage()+"|"+e.toString());
alert.setTimeout(2000);
display.setCurrent(alert);
}
try {
TextMessage textmessage = (TextMessage) clientConn.newMessage(MessageConnection.TEXT_MESSAGE);
textmessage.setAddress("sms://" + mno);
textmessage.setPayloadText(msg);
clientConn.send(textmessage);
} catch (Exception e) {
Alert alert = new Alert("Alert", "", null, AlertType.INFO);
alert.setTimeout(Alert.FOREVER);
alert.setString(e.getMessage()+"|"+e.toString());
System.out.println(e.getMessage()+"|"+e.toString());
display.setCurrent(alert);
}
}
}
}
}
我怀疑问题在于
clientConn
为空
毕竟,您是在前一个
try
块中为它赋值,但是如果您从第一个块捕获异常,您将继续运行,就像它已经工作一样。不要那样做。这是我的代码,我可以通过它发送短信。只需在Midlet中添加权限。
MIDlet权限:javax.microedition.io.Connector.sms、javax.wireless.messaging.sms.send
我的密码是
import javax.microedition.io.*;
import javax.microedition.lcdui.*;
import javax.microedition.midlet.MIDlet;
import javax.wireless.messaging.*;
public class SendSms extends MIDlet implements CommandListener {
Display display;
private TextField toWhom;
private TextField message;
private Alert alert;
private Command send, exit;
MessageConnection clientConn;
private Form compose;
public SendSms() {
display = Display.getDisplay(this);
compose = new Form("Compose Message");
toWhom = new TextField("To", "", 10, TextField.PHONENUMBER);
message = new TextField("Message", "", 600, TextField.ANY);
send = new Command("Send", Command.BACK, 0);
exit = new Command("Exit", Command.SCREEN, 5);
compose.append(toWhom);
compose.append(message);
compose.addCommand(send);
compose.addCommand(exit);
compose.setCommandListener(this);
}
public void startApp() {
display.setCurrent(compose);
}
public void pauseApp() {
}
public void destroyApp(boolean unconditional) {
notifyDestroyed();
}
public void commandAction(Command cmd, Displayable disp) {
if (cmd == exit) {
destroyApp(false);
}
if (cmd == send) {
String mno = toWhom.getString();
String msg = message.getString();
if (mno.equals("")) {
alert = new Alert("Alert");
alert.setString("Enter Mobile Number!!!");
alert.setTimeout(Alert.FOREVER);
display.setCurrent(alert);
} else {
try {
clientConn = (MessageConnection) Connector.open("sms://" + mno);
} catch (Exception e) {
alert = new Alert("Alert");
// alert.setString("Unable to connect to Station because of network problem");
alert.setString(e.getMessage()+"|"+e.toString());
System.out.println(e.getMessage()+"|"+e.toString());
alert.setTimeout(2000);
display.setCurrent(alert);
}
try {
TextMessage textmessage = (TextMessage) clientConn.newMessage(MessageConnection.TEXT_MESSAGE);
textmessage.setAddress("sms://" + mno);
textmessage.setPayloadText(msg);
clientConn.send(textmessage);
} catch (Exception e) {
Alert alert = new Alert("Alert", "", null, AlertType.INFO);
alert.setTimeout(Alert.FOREVER);
alert.setString(e.getMessage()+"|"+e.toString());
System.out.println(e.getMessage()+"|"+e.toString());
display.setCurrent(alert);
}
}
}
}
}
你从哪里得到例外?哪一行?我想我在最后一个Try-Catch块中遇到了异常。我觉得短信有点问题。>>TEXT MESSAGE TEXT MESSAGE=(TEXT MESSAGE)clientConn.newMessage(MessageConnection.TEXT\u MESSAGE);谢谢。。我没有添加权限:MIDlet权限:javax.microedition.io.Connector.sms,javax.wireless.messaging.sms.send这是我愚蠢的错误..但是非常感谢你的回复。@RiddhiBarbhaya:但这不是完整的修复方法-无论出于什么原因,当在第一个
try
块中抛出异常时,你都应该修复这个事实,下一个街区肯定会失败。。。