有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

swing Java,在类之间传递值

好吧,我是Java的noob,这让我明白了

我有一个按钮,可以调用一个类,在这个类中运行一些背景代码,以检查磁带机是否处于联机、脱机或繁忙状态

按钮代码:

private void btnRunBckActionPerformed(java.awt.event.ActionEvent evt) {                                          
    // TODO add your handling code here:
    btnRunBackup runBackupObject = new btnRunBackup();

    runBackupObject.checkStatus();

    lblRunBck.setText("Errors go here");
}

然后我有一个单独的class文件btnRunBackup

public class btnRunBackup{
    public void checkStatus(){
        /*
        Here I simply create a tempfile and run some
        linux commands via getRuntime and print the
        output to the tempfile

        Then I call my second method passing the
        absolute file path of the tempfile
        */
        this.statusControl(path);
    }catch(IOException e){          
            e.printStackTrace();

    public void statusControl(String param) throws FileNotFoundException, IOException{
        /*
        Here I use BufferedReader to go through the
        tempfile and look for as series of 3 
        different strings.

        I use a if else if statement for flow control
        depending on what string was found.

        string 1 will call a new Jframe

        if string 2, 3 or none of them are found the 
        is where I am stuck at

    }
}

我想把一个String值返回给btnRunBckActionPerformed()。 原因是lblRunBck最初根本不会显示任何文本,但例如,用户单击按钮,资源碰巧很忙,然后我想运行lblRunBck.setText(param);在lblRunBck上拒绝用户继续的权限


private void btnRunBckActionPerformed(java.awt.event.ActionEvent evt) {                                          
        // TODO add your handling code here:
        String text;

        btnRunBackup runBackupObject = new btnRunBackup();

        runBackupObject.checkStatus();

        lblRunBck.setText("Errors go here");
    }    

这是我的btnRunBackup课程

public class btnRunBackup {    
private String s;

public void checkStatus() {

    String s, path = null;
    Process p;


    try{//try1

        //create a temp file named tempfilexxx.tmp
        File temp = File.createTempFile("tempfile", ".tmp"); 
        //get file path
        path = temp.getAbsolutePath();
        System.out.println("checkStatus:  " + path);


    //write to tempfilexxx.tmp
        BufferedWriter bw = new BufferedWriter(new FileWriter(temp));
        try{// try2
            //set p = to the content of ls home
            p = Runtime.getRuntime().exec("ls /home | grep ariel");
            BufferedReader br = new BufferedReader(
                new InputStreamReader(p.getInputStream()));
            //write content of p to tempfilexxx.tmp line by line
            while ((s = br.readLine()) != null)
                bw.write(s + "\n");
            //close BufferedReader
            br.close();
        }catch (Exception e){} //END OF try2

        //close BufferedWriter
        bw.close();

        /*
        Now that we ran the 'mt -f /dev/nst0 status command under home we 
        will filter for one of the following strings 
        (for testing we will use ls -la /home and filter for ariel)

        We will do this by calling the checkStatus method
        */

        this.statusControl(path);

    }catch(IOException e){          
        e.printStackTrace();

    }// END OF try1

}// END OF listDir

//throws FileNotFoundException for bufferedReader if file not found
public void statusControl(String param) throws FileNotFoundException, IOException{
    /*
    On production code there will be 4 possible conditions:
        1.  ONLINE - ready to write (currently we will use ariel)
        2.  DR_OPEN - no tape available
        3.  /dev/nst0: Device or resource busy - resource bussy
        4.  If other than stated above give error 1000
    */
    System.out.println("statusControl:  " + param);

    String ONLINE = "arielvz", 
            OPEN = "DR_OPEN", 
            BUSSY = "Device or resource busy", 
            sCurrentLine;

    //Scan file line by line for one of the above options
    BufferedReader br = new BufferedReader(new FileReader(param));
    while ((sCurrentLine = br.readLine()) != null){
        //Tape is online and ready for writing
        if (sCurrentLine.contains(ONLINE)){
            System.out.println("found ariel");
        }
        //There is no tape in the tape drive
        else if (sCurrentLine.contains(OPEN)){
            //lblRunBck should tell the user to put a tape in the drive
            System.out.println("No tap in tape drive");
        }
        else if (sCurrentLine.contains(BUSSY)){
            //lblRunBck should notify user that the resource is in use
            System.out.println("Device or resource bussy");
        }
        else{
            //Something unexpected happend
            System.out.println("Error 1001:  Please notify Administrator");
        }

    }

}//END OF statusControl

public String returnHandler(String param){
    return param;
    }
}

也许这会让事情变得更清楚


共 (1) 个答案

  1. # 1 楼答案

    如果你想让checkStatus返回一个状态,那么不要让它什么也不返回(一个void函数)

    public class btnRunBackup {    
        private String s;
    
        public void checkStatus() {
    

    但将其作为字符串返回错误,如下所示:

    public class btnRunBackup {    
        private String s;
    
        public String checkStatus() {
            String error = null; // by default no error
              ... do whatever you need to find out the error
                  .... 
                  error = "error is: xxx ";
            return error; // return null (no error ) or what you found
        }
    

    更改调用代码中的逻辑,以显示checkStatus返回的错误

    private void btnRunBckActionPerformed(java.awt.event.ActionEvent evt)     
    {
    
            // TODO add your handling code here:
            String error;
    
            btnRunBackup runBackupObject = new btnRunBackup();
    
            error = runBackupObject.checkStatus();
    
            lblRunBck.setText(error == null ? "No error" : error);
    }