我在正常的Jpanel上有我的按钮和动作监听器,当我点击它应该打开一个联系窗口的按钮,然后向它们发送每个文本1乘1.它打开一个窗口,在发送短信之前保持空白,即使在我的动作监听器中,它显然需要首先启动窗口。
else if (ae.getActionCommand() == "Initiate Recall") {
int doneCheck = 0;
if (doneCheck == 0){
oh.ViewAllMembers();
doneCheck = 1;
}
if (doneCheck == 1){
try {
oh.doRecall();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
这是我的召回方法
public void doRecall() throws Exception {
String customMessage = getMessage();
boolean programOpen = true;
Member con = new Member();
Object data[][] = new Object[v.size()][8];
k = 0;
for (int j = 0; j < v.size(); j++) {
con = (Member) v.elementAt(k);
data[j][0] = con.getFName();
data[j][1] = con.getLName();
data[j][2] = con.getNname();
data[j][3] = con.getEMail();
data[j][4] = con.getAddress();
data[j][5] = con.getPhoneNo();
data[j][6] = con.getresponse();
data[j][7] = con.getBday();
try {
String myPasscode = "*******";
String myUsername = "*******";
String toPhoneNumber = con.getPhoneNo();
customMessage = customMessage.replaceAll("\\s+", "+");
System.out.println(customMessage);
String requestUrl = ("http://cloud.fowiz.com/api/message_http_api.php?username=******&phonenumber=+"
+ toPhoneNumber + "&message=" + customMessage + "&passcode=******");
URL url = new URL(requestUrl);
HttpURLConnection uc = (HttpURLConnection) url.openConnection();
System.out.println(uc.getResponseMessage());
String reply = uc.getResponseMessage();
if (reply.equalsIgnoreCase("ok")) {
}
} catch (Exception ex) {
System.out.println(ex.getMessage());
}
k++;
}
k = 0;
for (int j = 0; j < v.size(); j++) {
con = (Member) v.elementAt(k);
boolean phoneCheck = false;
while (phoneCheck != true) {
mR2 = new MailReader();
String host = "pop.gmail.com";// change accordingly
String mailStoreType = "pop3";
String username = "*********@gmail.com";// change
// accordingly
String password = "*******";// change accordingly
MailReader.check(host, mailStoreType, username, password);
if (MailReader.searchForPhone(con.getPhoneNo()) == true) {
System.out.println("IT WORKED");
phoneCheck = true;
}
}
}
}
这是我的观点联系方式
public void ViewAllMembers() {
newFrame = new JFrame("All Members In The Roster");
newFrame.setSize(600, 300);
newFrame.setIconImage(img);
Member con = new Member();
String columnNames[] = { "First Name", "Last Name", "Nickname",
"E Mail Address", "Address", "Phone No.", "response", "B'day" };
Object data[][] = new Object[v.size()][8];
for (int j = 0; j < v.size(); j++) {
con = (Member) v.elementAt(k);
data[j][0] = con.getFName();
data[j][1] = con.getLName();
data[j][2] = con.getNname();
data[j][3] = con.getEMail();
data[j][4] = con.getAddress();
data[j][5] = con.getPhoneNo();
data[j][6] = con.getresponse();
data[j][7] = con.getBday();
k++;
}
k = 0;
JTable abtable = new JTable(data, columnNames);
JScrollPane scrollPane = new JScrollPane(abtable);
abtable.setPreferredScrollableViewportSize(new Dimension(500, 370));
JPanel pane = new JPanel();
JLabel label = new JLabel("Members Currently In The Recall Roster");
pane.add(label);
newFrame.getContentPane().add(pane, BorderLayout.SOUTH);
newFrame.getContentPane().add(scrollPane, BorderLayout.CENTER);
newFrame.setLocation(screenWidth / 4, screenHeight / 4);
newFrame.show();
}
答案 0 :(得分:1)
问题:
else if (ae.getActionCommand() == "Initiate Recall") {
请勿使用==
来比较字符串。理解==
检查两个对象是否相同而不是您感兴趣的。另一方面,这些方法检查两个字符串是否具有相同的字符相同的顺序,这是重要的。而不是
if (fu == "bar") {
// do something
}
做,
if ("bar".equals(fu)) {
// do something
}
,或者
if ("bar".equalsIgnoreCase(fu)) {
// do something
}
下一步:
int doneCheck = 0;
if (doneCheck == 0){
oh.ViewAllMembers();
我猜这是一个长期运行的代码 - 你永远不会告诉我们这是做什么的(??)。如果是这样,它会让您完整的Swing GUI进入睡眠状态,使其无法响应。也许它需要在后台线程上运行。
doneCheck = 1;
}
if (doneCheck == 1){
try {
oh.doRecall();
}
oh.doRecall()
是否显示您的JTable?如果是,或者如果没有,那么您并没有很好地向我们解释您的代码,但似乎假设我们可以理解未显示的代码和概念。现实检查:我们不能。
修改强>
doRecall()
代码应该在后台线程中调用,例如使用SwingWorker(Google Concurrency in Swing
),因为它会占用Swing事件线程,从而阻止您显示其他代码。这是您的主要问题,本教程将帮助您学习如何解决它。==
来比较字符串。JFrame#show()
。他们因某种原因而被弃用,Java API将告诉您应该使用的替代方案。像......那样的东西。
if ("Initiate Recall".equalsIgnoreCase(ae.getActionCommand())) {
// viewAllMembers method name should begin with a lower-case letter
oh.viewAllMembers();
SwingWorker<Void, Void> worker = new SwingWorker<Void, Void>() {
@Override
protected Void doInBackground() throws Exception {
oh.doRecall();
return null;
}
@Override
protected void done() {
try {
get();
} catch (InterruptedException | ExecutionException e) {
// do something with any exceptions here
e.printStackTrace();
}
}
};
worker.execute();
}