java - 如何使用 Java 中文本字段的用户输入运行 .sh 脚本?

标签 java swing sh jtextfield processbuilder

我尝试使用 txtfield 中的用户输入启动 .sh 脚本。 思路:用户在txt字段中写入参数。当按下按钮时,脚本会以此参数启动。

我的代码:

private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) 
{                                         
String valueURL;
valueURL = URLtxt.getText().toString();              
ProcessBuilder processBuilder = new ProcessBuilder();
// -- Linux --
// Run a shell command
processBuilder.command("bash", "-c","nikto -h", valueURL,");     

try {

Process process = processBuilder.start();
StringBuilder output = new StringBuilder();
BufferedReader reader = new BufferedReader(
new InputStreamReader(process.getInputStream()));
String line;
while ((line = reader.readLine()) != null) {
output.append(line + "\n");         
}
int exitVal = process.waitFor();
if (exitVal == 0)                                            
 {
    this.hide();
    ScanWS sws = new ScanWS() ;
    sws.setVisible(true);

最佳答案

  1. 事件监听器在 UI 线程中触发,因此处理必须。您的监听器实现等待外部进程,它可能会卡住您的用户界面。所有流程触发和关心逻辑必须在单独的线程中启动。

  2. 流程是一个相当古老的结构,并且存在输入/输出问题。进程在工作期间将某些内容写入其输出流的缓冲区,当缓冲区全部填满时 - 进程挂起,等待输出流腾出一些空间。 因此,process.input 和 process.output 处理器也必须在单独的线程中工作。

关于java - 如何使用 Java 中文本字段的用户输入运行 .sh 脚本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58317540/

相关文章:

java - 如何实现更强大的应用程序签名 key

java - 为什么要先捕获 ArrayIndexOutOfBoundsException 再捕获 IndexOutOfBoundsException?

java - 如何为 JTable 中的单元格着色?

java - 在 JPanel 上绘制多个形状

linux - bash 将每隔一个逗号更改为指向

Docker入口点脚本根权限

java - 如何通过数据id从Arraylist中删除数据

java - 为什么 JList 的 fireContentsChanged 调用会卡住整个 GUI?

java - TableCellEditor:按下按键清除原始文本;如果没有给出输入则保留值

macos - Mac 终端中的 cut 命令缺少补充选项