有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

控制台中带有引号/空格的java Javafx命名参数

我想从控制台启动一个javafx程序,并使用getParameters()访问(命名)参数

我将参数保存在一个名为args的变量中

当我调用java -jar test.jar --arg1="hello world" arg2=123时,它会工作
但是,当我键入java -jar test.jar $args
参数分为--arg1="helloworld"

enter image description here

如何将命名参数保持为“arg1”->;“你好,世界”

enter image description here


共 (2) 个答案

  1. # 1 楼答案

    Oracle's Command Line Arguments Docs声明args的值应包含在引号内,以便将其视为单个参数。 尝试编辑您的参数文件,使其包含在引号中

  2. # 2 楼答案

    我用这个java示例进行测试:

    public class Echo extends Application {
       
       /*
        * (non-Javadoc)
        * @see javafx.application.Application#start(javafx.stage.Stage)
        */
       @Override
       public void start(Stage primaryStage) throws Exception {
          
          Parameters params = getParameters();
          System.out.println("\nRaw");
          params.getRaw().forEach(e -> {
             System.out.println(e);
          });
          
          System.out.println("\nNamed");
          params.getNamed().keySet().forEach(key -> {
             System.out.println("key : " + key + " / value : " + params.getNamed().get(key));
          });
          
          System.out.println("\nUnnamed");
          params.getUnnamed().forEach(unnamed -> {
             System.out.println(unnamed);
          });
          
          Platform.exit();
       }
       
       public static void main(String[] args) {
          launch(args);
       }
       
    }
    

    它实际上在Windows上运行良好

    D:\Profiles\PagboStack\Desktop           
    λ set args= arg1="Hello World" arg2=123 
                                            
    D:\Profiles\PagboStack\Desktop           
    λ echo %args%                            
     arg1="Hello World" arg2=123            
                                            
    D:\Profiles\PagboStack\Desktop           
    λ java -jar Echo.jar %args%              
                                            
    Raw                                      
     arg1=Hello World                       
    arg2=123                                 
                                            
    Named                                    
    key : arg1 / value : Hello World         
                                            
    Unnamed                                  
    arg2=123                                 
    

    但在Unix中,它更为复杂。多亏了this answer,我成功了
    请注意,链接提供了您可以根据您的需要考虑的其他解决方案。<强>

    [13/06/2018 14:59.32]  /drives/d/profiles/pagbo/Desktop
    [pagbo.stack] ➤ export args=' arg1="Hello World"|arg2=123'
                                     
    ───────────────────────────────────────────────────────────
    [13/06/2018 15:05.04]  /drives/d/profiles/pabgo/Desktop
    [pagbo.stack] ➤ IFS='|'
                                     
    ───────────────────────────────────────────────────────────
    [13/06/2018 15:05.07]  /drives/d/profiles/pagbo/Desktop
    [pagbo.stack] ➤ "$JAVA_HOME"/bin/java.exe -jar Echo.jar $args
    
    Raw
     arg1="Hello World"
    arg2=123
    
    Named
    key : arg1 / value : "Hello World"
    
    Unnamed
    arg2=123
    

    这里的要点是更改默认为空格的内部字段分隔符(IFS)