胡景豫
摘要:根據(jù)實際工作需要,使用JAVA語言開發(fā)了一款射角修正計算軟件,該文詳細(xì)介紹了開發(fā)過程使用的界面設(shè)計、對話框構(gòu)建、內(nèi)部類等技術(shù)方法。經(jīng)實踐檢驗,該軟件在試驗現(xiàn)場使用非常方便,極大的提高了工作效率。
關(guān)鍵詞:發(fā)射角計算;JAVA;軟件工具
中圖分類號:TP311 文獻(xiàn)標(biāo)識碼:A 文章編號:1009-3044(2015)07-0105-03
Abstract: According to the practical needs in firing setting, launch angle calculation system is developed based on JAVA. This paper aims at introducing the techniques used in the process of development, including the design of interface, the construction of dialog box and the use of inner class. Proved in a practical firing setting situation, the platform features in easy-learning and easy-using, and improves the efficiency in firing setting.
Key words: launch angle; JAVA; application tool
某型火炮在陸上射擊考核過程中由于受到試驗場地的限制,為了確保安全性和便于觀測性,必須精準(zhǔn)控制連發(fā)射擊時的彈著點,對射擊完目標(biāo)彈之后火炮射角的調(diào)整提出了較高的技術(shù)要求。
彈丸落點位置主要由發(fā)射時火炮的方向、高低角度確定,并受氣象條件影響,通常確定連發(fā)射擊射角的方法是:報告目標(biāo)彈落點后,提出連續(xù)射擊時彈著點理想位置。提供涉及射角的計算參數(shù)主要有兩個,分別是下一組射擊理想落點與目標(biāo)彈落點的坐標(biāo)距離和目標(biāo)彈的射程,由于試驗現(xiàn)場條件所限,修正射角的計算過程通常由技術(shù)人員使用近似公式、通過計算器計算獲得,使用近似公式和計算過程數(shù)據(jù)的舍入,使計算結(jié)果有一定的誤差,且計算過程比較復(fù)雜緩慢。
如果能將計算過程編成軟件,使用時只需輸入基本數(shù)據(jù),直接得到計算結(jié)果,整個工作效率會得到較大提高,射擊間隔時間縮短,兩組射擊時氣象條件基本相同,彈丸外彈道飛行條件近似一致,落點會更加精準(zhǔn)?,F(xiàn)階段智能手機(jī)的使用已非常普便,基于Lunix內(nèi)核Android操作系統(tǒng)的手機(jī)使用人群也比較龐大[1],如果軟件能夠安裝在Android手機(jī)上,在基礎(chǔ)設(shè)施條件受限的試驗場,更能發(fā)揮出該軟件作用。
1 圖形交互界面布局設(shè)計
為了使軟件不僅能在電腦上運行而且在手機(jī)上也能運行,所以軟件開發(fā)環(huán)境選擇EclipseADT,如果使用者通過智能手機(jī)軟件完成計算工作,需要軟件有一個簡潔易操作的圖形交互界面并響應(yīng)用戶操作。軟件編寫過程中使用了布局類、視圖容器類和普通視圖等組件,并使用XML語言控制這些組件的相互位置。定義Android系統(tǒng)視圖的XML文件保存在工程項目res\layout目錄中[2]。
TextView控件用來顯示文本,在程序中用來提示用戶在正確位置輸入文本,TextView控件顯示的文本在程序中不在變化,只需要在XML布局文件確定TextView控件的id、width、height、text屬性。
在用戶輸入文本的位置選擇使用EditText控件,EditText是TextView子類,在EditText控件設(shè)計過程需要考慮用戶可能輸入錯誤數(shù)據(jù)的情況,為了有效避免使用者輸入錯誤數(shù)據(jù),在輸入風(fēng)格屬性中指定只允許輸入浮點數(shù),不允許輸入文字,為計算過程提供有效的過濾屏障。
設(shè)置好文本控件與可編輯文本控件后,在整體的垂直布局中插入水平布局用于容納“計算”、“刷新”、“退出”三個按鈕,讓三個按鈕整齊的排列在輸入文本控件下方。這需要在布局XML文件中順序安排好每個控件的標(biāo)簽,并注意到在同一個布局文件中相同控件控件的id不能相同,以免程序無法讀取后續(xù)id相同的控件,在虛擬機(jī)運行結(jié)果如圖1所示:
2 用戶數(shù)據(jù)交互實現(xiàn)技術(shù)
帶界面的Android應(yīng)用程序必須由一個或多個活動組件用來顯示界面,在活動組件控制區(qū)域可以放置其它組件。為構(gòu)建界面區(qū)域程序中設(shè)計了一個JSActivity類擴(kuò)展于Activity核心類,并覆蓋其中的onCreate方法,在該方法中初始化用戶界面區(qū)域,通過setContentView方法讀取工程目錄中的布局文件,方法參數(shù)是布局文件的資源id。成功讀取布局文件之后可以繼續(xù)讀取布局文件中組件的id,在使用JAVA語言主程序代碼中對組件進(jìn)行初始化并對其內(nèi)容進(jìn)行控制,如從文本區(qū)域讀取用戶輸入,響應(yīng)用戶點擊按鈕的動作,反饋計算結(jié)果等。
程序中輸入?yún)?shù)只有兩個,但內(nèi)容格式是文本形式,不能直接用于程序計算,程序中使用getText()方法讀取用戶在文本區(qū)域輸入的值,該方法返回是一個Editable對象,通過查閱API文檔可知,這個對象只是一個可編輯的代碼單元,還不是字符串,需要使用Editable對象的toString()方法轉(zhuǎn)換成字符串,此時讀取的數(shù)據(jù)還不是JAVA語言中基本數(shù)值類型,不能用于計算,利用雙精度類型包裝器中的靜態(tài)方法,將用戶輸入轉(zhuǎn)換成雙精度浮點數(shù),具體代碼如下:
sc=Double.parseDouble(e1.getText().toString()); xzjl=Double.parseDouble(e2.getText().toString());
程序使用者在輸入正確數(shù)據(jù)后點擊計算按鈕后會彈出對話框顯示計算結(jié)果,用戶得到計算結(jié)果后通常會選擇重新計算或者直接退出程序,為實現(xiàn)這兩種功能,使用了帶兩個按鈕的對話框控件,一個按鈕執(zhí)行重新計算操作另一個執(zhí)行退出程序操作。這兩個按鈕被點擊的時候,在程序中使用回調(diào)方法響應(yīng)用戶動作,主程序JAVA代碼中為對話框兩個按鈕注冊監(jiān)聽器,監(jiān)聽器對象必須是實現(xiàn)了DialogInterface.OnClickListener接口的對象,由于對話框按鈕需要實現(xiàn)重新計算和退出程序的功能,這兩種功能都需要訪問主程序JSActivity類中的域,故將兩個對話框監(jiān)聽器類設(shè)計成JSActivity類中的內(nèi)部類,分別在onClick方法實現(xiàn)用戶點擊操作后的動作,最后將監(jiān)聽器對象傳遞給對話框設(shè)置按鈕的setPositiveButton和setNegativeButton方法,內(nèi)部類具體實現(xiàn)技術(shù)詳見代碼:
程序中除了使用了一個活動組件還使用了多個對話框組件,用來顯示計算結(jié)果和提示用戶進(jìn)行正確的操作,在設(shè)計上為防止用戶輸入錯誤數(shù)據(jù),在文本域設(shè)置了只能輸入數(shù)值的條件,還有一種情況就是用戶什么也不輸入,直接點擊計算按鈕,這樣計算過程將得不到任何數(shù)據(jù),程序拋RUNTIME類型異常,程序直接退出,為了避免這種情況的發(fā)生,在運行程序時判斷文本區(qū)域getText方法返回可編輯對象的正確性,通過達(dá)爾維克透視圖監(jiān)視該語句在調(diào)試過程中的值,用if語句判斷用戶輸入的正確性,如果用戶在可編輯文本組件中不輸入就任何數(shù)值的情況下就點擊了計算按鈕,程序?qū)棾鰧υ捒蛱崾居脩糨斎霐?shù)據(jù)。
在Android程序中使用對話框需要通過AlertDialog類來構(gòu)建,因為AlertDialog類的構(gòu)造方法是受保護(hù)的方法,在代碼中不能使用關(guān)鍵字new來創(chuàng)建AlertDialog對象,但可以通過其內(nèi)部類Builer來創(chuàng)建,用Builer類的create方法返回超類AlertDialog對象,再通過超類show方法顯示對話框。使用Builer類構(gòu)造方法需要傳遞一個Context上下文參數(shù),通常只需傳一個this參數(shù)既可,由于本程序在點擊按鈕后才出現(xiàn)對話框,在設(shè)計程序時將Builer構(gòu)造方法放置在按鈕監(jiān)聽器的內(nèi)部類中,這時直接使用this參數(shù)傳遞給Builer構(gòu)造器,程序會拋出異常而終止運行。解決這一問題需要將主程序JSActivity類做為Context對象傳遞給Builer構(gòu)造器,解決代碼如下:
AlertDialog.Builder(JSActivity.this).setTitle("請輸入數(shù)據(jù)").create();
3 清單文件編輯與APK包的制作
一個Android手機(jī)程序必須有一個清單文件,文件名為AndroidManifest.xml,在運行程序之前要在這個文件中設(shè)置程序的必要信息,在程序中使用的活動組件如本程序使用的JSActivity類需要在清單文件中注冊,設(shè)置應(yīng)用程序圖標(biāo),活動窗口名稱,設(shè)置完成后可以進(jìn)行程序調(diào)試。
程序調(diào)試成功后要想使程序在真機(jī)上運行,還需對生成擴(kuò)展名為apk安裝包進(jìn)行簽名,簽名可以使用開發(fā)工具ADT插件附加功能,在導(dǎo)出apk安裝包的過程設(shè)置需要導(dǎo)出應(yīng)用程序的名稱和簽名信息,導(dǎo)出成功后生成已簽完名的apk文件及簽名密鑰,這時apk文件可以直接傳到手機(jī)上安裝,安裝運行后結(jié)果如圖2所示:
4 結(jié)束語
在實際工作中,修正射角計算瞬時完成,且結(jié)果精度可視情況截取,不必在計算過程中舍取,取得了較好的工作效果。本程序的開發(fā)使用,改變了傳統(tǒng)工作模式,緊隨時代潮流,利用先進(jìn)技術(shù),使智能手機(jī)在工作中發(fā)揮出本身潛能,在條件比較艱苦的試驗現(xiàn)場得到了良好應(yīng)用,降低了技術(shù)門限,任何人都可以使用,還可以與其它計算方法相互印證,極大的提高了工作效率。
參考文獻(xiàn):
[1] 李寧.Android開發(fā)完全講義[M].北京:中國水利水電出版社,2012.
[2] 扶松柏,于秀青.Android開發(fā)從入門到精通[M].北京:北京希望電子出版社,2012.