gpt4 book ai didi

Java,类之间传递值

转载 作者:行者123 更新时间:2023-12-01 09:37:40 24 4
gpt4 key购买 nike

好吧,我是 Java 菜鸟,这让我很感兴趣。

我有一个按钮,可以调用一个类,在该类中运行一些后台代码来检查磁带驱动器是否在线、离线或繁忙。

按钮代码:

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

Maby 这样会更清楚

最佳答案

如果您希望 checkStatus 返回状态,则不要让它返回任何内容(空函数)

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

关于Java,类之间传递值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38723101/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com