gpt4 book ai didi

java - Servlet Loop 函数调用直到 while 循环的结果

转载 作者:行者123 更新时间:2023-11-29 04:19:14 25 4
gpt4 key购买 nike

我有这个问题:

我有一个功能可以正常工作,但关闭窗口所需的时间比我可以处理的时间长。所以我有另一个函数,如果另一个窗口完成,它会检查任务列表调用。它只检查一次,所以我需要让它检查一遍又一遍,直到完成。

校验函数:

private int getWin() {
Process Checkprocess;
try {
String Checkcommand = "cmd /c tasklist /V /FI \"WINDOWTITLE eq Admin:*\"";
Checkprocess = Runtime.getRuntime().exec(Checkcommand);
String Checkline;
String Checkval="PID";

is = new BufferedReader(new InputStreamReader(Checkprocess.getInputStream()));
while((Checkline = is.readLine()) != null) {
retval = Checkline.contains(Checkval);
if (retval)
test = 1;
else
test = 0;
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return test;
}

如果 false 应该返回 0,如果有一个带有该标题的窗口则应该返回 1。

整个来源:

 import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.concurrent.TimeUnit;



public class RunCommand extends HttpServlet {

/**
*
*/
private static final long serialVersionUID = 5711290708294275382L;
String commands= null;
//this could be set to a specific directory, if desired
File dir = null;
BufferedReader is = null;
BufferedReader es = null;
boolean retval;
int test;
private BufferedReader outfile;

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
performTask(request, response);
}

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {

performTask(request, response);
}


private int getWin() {
Process Checkprocess;
try {
String Checkcommand = "cmd /c tasklist /V /FI \"WINDOWTITLE eq Admin:*\"";
Checkprocess = Runtime.getRuntime().exec(Checkcommand);
String Checkline;
String Checkval="PID";


is = new BufferedReader(new InputStreamReader(Checkprocess.getInputStream()));
while((Checkline = is.readLine()) != null) {
retval = Checkline.contains(Checkval);
if(retval)
test = 1;
else
test = 0;

System.out.println("HERE test" + retval);

}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return test;
}

private void performTask (HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out= response.getWriter();
try
{
String commandbuild = request.getParameter("commandinput");
String commandfilename = request.getParameter("commandfile");

final SimpleDateFormat datefor = new SimpleDateFormat("ddMMyyyy_HHmmss");
Timestamp timestamp = new Timestamp(System.currentTimeMillis());
String timeadd = datefor.format(timestamp);
System.out.println(timeadd);
String completefilename = "C:\\tmp\\" + commandfilename +"_"+ timeadd + ".txt ";

String commandfull = "db2 -tvz "+ completefilename + commandbuild ;

commands= "cmd /c db2cwadmin.bat " + commandfull;
//System.out.println(commands);
Process process;
if (dir != null)
process = Runtime.getRuntime().exec(commands, null, dir);
else
process = Runtime.getRuntime().exec(commands);
String line;
StringBuilder data = new StringBuilder();

is = new BufferedReader(new InputStreamReader(process.getInputStream()));
data.append("Command: " + commands);
data.append("\n\n\n");


while((line = is.readLine()) != null) {
//System.out.println(line);

data.append(line);
data.append("\n");

}
es = new BufferedReader(new InputStreamReader(process.getErrorStream()));
while((line = es.readLine()) != null)
System.err.println(line);


int exitCode = process.waitFor();
if (exitCode == 0) {
System.out.println("It worked");

while(test != 1) {
getWin();
if (test == 1)
break;
}

Process EndProcess;
String Endcommands = "taskkill /F /FI \"WINDOWTITLE eq Admin:*\"";
EndProcess = Runtime.getRuntime().exec(Endcommands);
int exitCodeEnd = EndProcess.waitFor();
System.out.println(exitCodeEnd);

//TimeUnit.SECONDS.sleep(10);


data.append("Window closed!");
data.append("\n");
data.append("\n");


outfile = new BufferedReader(new FileReader(completefilename));
String outfilelines;

while( (outfilelines = outfile.readLine()) != null ) {
data.append(outfilelines);
data.append("\n");

}

request.setAttribute("data", data);
out.append(data);
RequestDispatcher dispatcher= request.getRequestDispatcher("runCommand.jsp");
dispatcher.forward(request, response);

}
else
System.out.println("Something bad happend. Exit code: " + exitCode);


} //try
catch(Exception e)
{
System.out.println("Something when wrong: " + e.getMessage());
e.printStackTrace();
} //catch
finally
{
if (is != null)
try { is.close(); } catch (IOException e) {}
if (es != null)
try { es.close(); } catch (IOException e) {}
} //finally


}}

问题是,即使 getWin 返回真(有一个 println() 来检查),while 循环也没有退出并且 prog 没有继续。此外,它返回 true 而不是继续并返回几个 false 而不是 true 等等

当 test 为 1 时如何退出 while 循环?

谢谢

最佳答案

How can I have the while loop quit when test is 1?

您可以使用 break

  if (retval){
test = 1;
break; //exit loop
}else{
test = 0;
}

关于java - Servlet Loop 函数调用直到 while 循环的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50355068/

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