2016-08-02 27 views
0

Ok, also ich bin ein Neuling bei Java und das hat mich nur.Java, Übergabe von Werten zwischen Klassen

Ich habe eine Schaltfläche, die eine Klasse aufruft, in der einige Hintergrundcode ausgeführt wird, um zu überprüfen, ob das Bandlaufwerk online, offline oder beschäftigt ist.

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

Dann habe ich meine separate class Datei 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 

    } 
} 

Ich will zurück zu btnRunBckActionPerformed() einen String Wert zurückzukehren. Der Grund ist lblRunBck zeigt zunächst überhaupt keinen Text, aber zum Beispiel klickt der Benutzer auf die Schaltfläche, und die Ressource ist beschäftigt, dann möchte ich lblRunBck.setText(param) ausführen; auf lblRunBck, während der Benutzer die Berechtigung weigert sich weiterhin


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

hier ist meine btnRunBackup Klasse

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 Dies wird deutlich machen, mehr

+0

zurückgegeben worden Ich glaube, Sie wollen um einen "Rückruf" zu implementieren. Http://stackoverflow.com/questions/18279302/how-do-i-perform-a-java-callback-between-classes –

+0

Hallo, Danke aber nicht, ich habe es versäumt zu erwähnen das läuft lokal auf dem Server. Das wird jedoch mit etwas späterem helfen. –

+0

Then..where ist das Problem, eine Zeichenfolge von StatusControl an checkStatus zurückzugeben? Ich sehe das aktuelle Problem nicht: \ –

Antwort

1

Wenn Sie check wollen Geben Sie einen Status zurück und geben Sie nichts zurück (eine ungültige Funktion)

public class btnRunBackup {  
    private String s; 

    public void checkStatus() { 

aber es Fehler als String wie eine Rückkehr:

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 
    } 

ändern Sie Logik in Sie Code aufrufen, um anzuzeigen, welche Fehler wurden von check

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); 
} 
+0

Ok ich verstehe jetzt, danke für den Hilfe Mann –