【问题标题】:Javafx Named Parameters with Quotes/Spaces from Console来自控制台的带有引号/空格的 Javafx 命名参数
【发布时间】:2018-11-22 21:28:42
【问题描述】:

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

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

当我拨打java -jar test.jar --arg1="hello world" arg2=123 时,它可以工作。
但是,当我输入 java -jar test.jar $args 时,
参数分为--arg1="helloworld"

我如何才能将命名参数保留为“arg1”->“hello world”?

【问题讨论】:

  • 你如何评价args
  • args=$(

标签: java shell unix javafx console


【解决方案1】:

我拿这个 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)。

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 我尝试了这 3 种方法:--arg1="hello world"--"arg1=hello world""--arg1=hello world"。所有这三个导致与上图所示相同的结果,除了不同位置的橙色“(\”)。但是请注意,如果我根本不访问控制台变量,而是手动输入命令,它就可以工作。 java -jar test.jar --arg1="hello world" 但我希望将文件中的参数读入变量中,并使用它们。
    • @user3193260 我尝试在程序参数中使用 "--arg1=hello world" "arg2=123" 并且成功了。
    • @Pagbo 您是否尝试将“--arg1=hello world”“arg2=123”存储到控制台变量/文件中并使用它?这仍然有效吗?如果是,请复制并粘贴您使用的命令。
    猜你喜欢
    • 2015-11-25
    • 2023-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多