Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JSwing,在开始另一个操作之前,如何制作Jtable渲染?_Java_Swing_Jtable_Actionlistener - Fatal编程技术网

Java JSwing,在开始另一个操作之前,如何制作Jtable渲染?

Java JSwing,在开始另一个操作之前,如何制作Jtable渲染?,java,swing,jtable,actionlistener,Java,Swing,Jtable,Actionlistener,我在一个普通的Jpanel上为我的按钮设置了一个和动作监听器,当我点击按钮时,它应该会弹出一个联系人窗口,然后逐个发送一条文本。它会打开一个窗口,并一直保持空白,直到发送完文本消息,即使在我的action listener中,它明确要求首先打开窗口 else if (ae.getActionCommand() == "Initiate Recall") { int doneCheck = 0; if (doneCheck == 0){

我在一个普通的Jpanel上为我的按钮设置了一个和动作监听器,当我点击按钮时,它应该会弹出一个联系人窗口,然后逐个发送一条文本。它会打开一个窗口,并一直保持空白,直到发送完文本消息,即使在我的action listener中,它明确要求首先打开窗口

        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 doRecall()引发异常{
字符串customMessage=getMessage();
布尔编程开放=真;
成员con=新成员();
对象数据[][]=新对象[v.size()][8];
k=0;
对于(int j=0;j
这是我的观点联系方式

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();

}
public void ViewAllMembers(){
newFrame=newjframe(“名册中的所有成员”);
新帧设置大小(600300);
newFrame.setIconImage(img);
成员con=新成员();
字符串columnNames[]={“名字”、“姓氏”、“昵称”,
“电子邮件地址”、“地址”、“电话号码”、“回复”、“B'day”};
对象数据[][]=新对象[v.size()][8];
对于(int j=0;j
问题:

    else if (ae.getActionCommand() == "Initiate Recall") {
不要使用
==
来比较字符串。了解
==
检查两个对象是否相同,这不是您感兴趣的。另一方面,这些方法检查两个字符串是否具有相同顺序的相同字符,这就是这里的问题所在。所以不是

if (fu == "bar") {
  // do something
}

或者

下一步:

我猜这是一段长时间运行的代码——你永远不会告诉我们这是做什么的(??)。如果是这样的话,它会使您的整个Swing GUI处于休眠状态,从而使其无响应。也许它需要在后台线程上运行

    doneCheck = 1;
    }
    if (doneCheck == 1){
    try {
        oh.doRecall();
    }
oh.doRecall()
是否显示您的JTable?如果是这样,或者不是这样,您没有向我们很好地解释您的代码,但似乎假设我们可以理解未显示的代码和概念。现实检查:我们不能


编辑

  • 您的
    doRecall()
    代码应该在后台线程中调用,例如使用SwingWorker(Swing中的Google
    并发性)
    ),因为它会占用Swing事件线程,阻止其他代码显示。这是您的主要问题,本教程将帮助您了解如何解决它
  • 您似乎显示了多个JFrames,这是一个常见的Swing新手错误,您需要修复。如果需要显示从属窗口,请显示一个对话框(如JDialog),或者不显示子窗口,并使用CardLayout交换视图
  • 同样,不要使用
    ==
    来比较字符串
  • 不要调用不推荐使用的方法,例如
    JFrame#show()
    。它们被弃用是有原因的,JavaAPI将告诉您应该使用的替代方案

        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();
        }
if(“启动调用”.equalsIgnoreCase(ae.getActionCommand())){
//viewAllMembers方法名称应以小写字母开头
哦,查看所有成员();
SwingWorker worker=新SwingWorker(){
    int doneCheck = 0;

    if (doneCheck == 0){
    oh.ViewAllMembers();
    doneCheck = 1;
    }
    if (doneCheck == 1){
    try {
        oh.doRecall();
    }
        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();
        }