gpt4 book ai didi

java - Zenity bash 命令不适用于 Java

转载 作者:行者123 更新时间:2023-11-30 07:46:25 24 4
gpt4 key购买 nike

我正在尝试使用 zenity 命令获取用户的输入。这是我传递给 zenity 的命令:

zenity --question --title "Share File" --text "Do you want to share file?"

这是使用 Java 执行命令的代码:

private String[] execute_command_shell(String command)
{
System.out.println("Command: "+command);
StringBuffer op = new StringBuffer();
String out[] = new String[2];
Process process;
try
{
process = Runtime.getRuntime().exec(command);
process.waitFor();
int exitStatus = process.exitValue();
out[0] = ""+exitStatus;
BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line = "";
while ((line = reader.readLine()) != null)
{
op.append(line + "\n");
}
out[1] = op.toString();
}
catch (Exception e)
{
e.printStackTrace();
}

return out;
}

虽然我得到一个输出对话框,但标题只有第一个单词“Share”,问题的文本也只显示一个单词“Do”

对于这种奇怪的行为有什么解释吗?解决办法是什么?

最佳答案

这对我有用:

Runtime.getRuntime().exec(new String[]{"zenity","--question","--title","Share File","--text","Do you want to share file?"})

我建议拆分 java 代码中的参数,以便您可以检查而不是用引号传递整个命令。

这是一个包含拆分以处理引号的示例:

String str = "zenity --question --title \"Share File\" --text \"Do you want to share file?\"";
String quote_unquote[] = str.split("\"");
System.out.println("quote_unquote = " + Arrays.toString(quote_unquote));
List<String> l = new ArrayList<>();
for(int i =0; i < quote_unquote.length; i++) {
if(i%2 ==0) {
l.addAll(Arrays.asList(quote_unquote[i].split("[ ]+")));
}else {
l.add(quote_unquote[i]);
}
}
String cmdarray[] = l.toArray(new String[l.size()]);
System.out.println("cmdarray = " + Arrays.toString(cmdarray));
Runtime.getRuntime().exec(cmdarray);

关于java - Zenity bash 命令不适用于 Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33878802/

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