首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Zenity命令不使用Java

Zenity命令不使用Java
EN

Stack Overflow用户
提问于 2015-11-23 19:15:41
回答 2查看 374关注 0票数 1

我试图使用zenity命令从用户那里获取输入。下面是我传递给zenity的命令:

代码语言:javascript
复制
zenity --question --title "Share File" --text "Do you want to share file?"

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

代码语言:javascript
复制
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;
}

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

对这种奇怪的行为有什么解释吗?周围的工作是什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-11-23 22:15:48

这对我起了作用:

代码语言:javascript
复制
Runtime.getRuntime().exec(new String[]{"zenity","--question","--title","Share File","--text","Do you want to share file?"})

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

下面是一个示例,包括处理引号的拆分:

代码语言:javascript
复制
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);
票数 1
EN

Stack Overflow用户

发布于 2019-08-22 05:37:32

或者,您可以使用UiBooster for Java来创建这个对话框。这样,您就不必安装zenity,而且您也不局限于windows上的linux或gtk。

代码语言:javascript
复制
String userInput = new UiBooster().showTextInputDialog("Do you want to share file?");
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33878802

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档