2017-07-19 15 views
2

可以通過以下方式傳遞類的參數嗎?在命令行中爲該類中的主方法傳遞參數的正確方法java

java cs123.Learn -mode train -algorithm even_odd -model_file speech.even_odd.model -data speech.train -task classification 

這裏,cs123是不同java文件及其編譯版本所在的包。使用以下命令

javac -cp commons-cli-1.2.jar cs123\*.java 

爲了把事情說清楚我已編譯了.java文件時,的.java的結構和.jar文件

lib 
|--cs362 
| |--all the java files including Learn.java 
|--commons-cli-1.2.jar 

我從lib運行命令提示符夾。我擔心的是,從java文檔和其他來源,傳遞參數的格式只是一串字符串,對於選項,它也可以從java文檔中看到。使用上面的運行時間java執行,我得到的

java.lang.ClassNotFoundException: org.apache.commons.cli.OptionBuilder 

,但如果我執行,

java -cp commons-cli-1.2.jar cs123.Learn -mode train -algorithm even_odd -model_file speech.even_odd.model -data speech.train -task classification 

我收到以下錯誤

Unrecognized option: -mode 
Error: Could not create the Java Virtual Machine 
Error: A fatal exception has occured. Program will exit. 

我明白java的嘗試任何關聯與其關聯的-作爲預定義的選項,-mode不是它所識別的那個。但在同一時間.jar文件是在那裏做它的工作。出於研究目的,commons-cli-1.2.jar文件與幾種方法相關聯,其中兩個是commons/cli/Optioncommons/cli/OptionBuilder

我不得不這樣做,因爲指令是運行使用

java cs123.Learn -mode train -algorithm even_odd -model_file speech.even_odd.model -data speech.train -task classification 

回答

0

燦參數的一類可以通過以下方式計劃?

我不這麼認爲,因爲你試圖通過「-naming」傳遞的是程序參數。在您的應用程序中檢索程序參數時使用String [] args,而在Java中,您沒有數組中的String索引。

如果你想達到你想要的,你仍然可以做到,但你必須在你的程序中實現邏輯。首先,您需要獲取程序中的所有參數,然後通過構建地圖來實現邏輯並處理該地圖。例如,你可以說如果任何參數(即args [0])以「 - 」開始,這意味着它是你的映射關鍵,並且下面的參數(即args [1])是關聯的值。

編輯:我沒用過公共-CLI和我可能是完全錯誤的,但是從一個快速的在線研究,我認爲庫爲您提供構建命令在命令行中執行邏輯,一旦您的應用程序是運行。

+0

commons-cli-1.2.jar文件正在用於此目的。它具有稱爲Option和OptionBuilder的類,以便能夠以給定格式解析命令行。事實上,以這種方式傳遞論據對我來說也是新的。由於主類已經實施,我必須以這種方式運行程序。我只需要包含一些代碼來實現機器學習算法。我沒有編寫解析命令行的代碼。它已經在那裏。 –

+0

我添加了一篇關於commons-cli – Maaaatt

+0

的文章,可以告訴我,我的執行java命令的方法是否正確?我說的是 java -cp commons-cli-1.2.jar cs123.Learn -mode train -algorithm even_odd -model_file speech.even_odd.model -data speech.train -task classification 在這種情況下,可能還有其他一些我需要了解的依賴關係。 –

2

我對commons-cli進行了測試,其中-mode可選。它按預期進行編譯和運行。所以我可以確保您可以使用該選項。 enter image description here 我站在java文件夾中運行該命令,我的文件夾結構:

java 
|--upwork 
| |--Main.java 
|--commos-cli-1.2.jar 

對於你的問題:我看到你的命令只點classpath中commons-cli lib和不指向您的包的位置。請參考this answer您的命令應該以:java -cp .;commons-cli-1.2.jar ...

如果這沒有幫助,請上傳您的代碼以獲得幫助,或者您可以創建一個像我一樣的簡單測試來檢查此問題。

相關問題