简体   繁体   English

Java,在类之间传递值

[英]Java, passing values between classes

Ok so I'm a noob at Java and this just got me. 好的,所以我是Java的新手,这让我很满意。

I have a button that calls a class in which some background code runs to check if the tape drive is online, offline or busy. 我有一个按钮,该按钮调用一个在其中运行一些后台代码的类,以检查磁带机是处于联机状态,脱机状态还是繁忙状态。

Button Code: 按钮代码:

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");
}

Then I have my separate class file btnRunBackup . 然后,我有单独的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

    }
}

I want to return a String value back to btnRunBckActionPerformed() . 我想将String值返回给btnRunBckActionPerformed() The reason is lblRunBck will initially show no text at all but for instance the user clicks on the button and the resource happens to be busy then i want to run lblRunBck.setText(param) ; 原因是lblRunBck最初将根本不显示任何文本,但是例如,用户单击按钮并且资源恰好很忙,然后我要运行lblRunBck.setText(param) on lblRunBck while refusing the user permission to continue 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");
    }    

here is my btnRunBackup class 这是我的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;
    }
}

Maby This will make it more clear Maby这将使其更加清晰

If you want checkStatus to return a status, then do not make it returning nothing (a void function) 如果希望checkStatus返回状态,则不要使其不返回任何内容(无效函数)

public class btnRunBackup {    
    private String s;

    public void checkStatus() {

but make it returning error as a String like: 但使其返回错误,如String所示:

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
    }

change you logic in you calling code to display what error have been returned by checkStatus 更改调用代码中的逻辑以显示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);
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM