freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于http的多線程下載器畢業(yè)論文(已改無錯(cuò)字)

2022-08-22 20:16:22 本頁面
  

【正文】 垃圾箱; 關(guān)鍵代碼如下: private void addListener(){ //新建下載監(jiān)聽事件 (new ActionListener() { public void actionPerformed(ActionEvent e) { addNewDownload()。//添加一個(gè)新的下載 } })。 //暫停下載監(jiān)聽事件 (new ActionListener() { public void actionPerformed(ActionEvent e) { int row=()。//得到所有下載條目個(gè)數(shù) for(int i=0。irow。i++){ if((i)){ //暫停選中下載項(xiàng) (i)。 } } 湖南科技大學(xué)本科生畢業(yè)設(shè)計(jì)(論文) 18 } })。 //開始下載監(jiān)聽事件 (new ActionListener() { public void actionPerformed(ActionEvent e) { int row=()。//得到所有下載條目個(gè)數(shù) for(int i=0。irow。i++){ if((i)){ //開始選中下載項(xiàng) (i)。 } } } })。 //刪除下載監(jiān)聽事件 (new ActionListener() { public void actionPerformed(ActionEvent e) { int row=()。 for(int i=0。irow。i++){ if((i)){ //刪除選中項(xiàng) //刪除的下載會同時(shí)在表格和當(dāng)前框架內(nèi)的 down數(shù)組內(nèi)刪除 (i)。 (i)。 i。 } } } })。 GlobalData 模塊設(shè)計(jì) GlobalData 模塊用于保存全局?jǐn)?shù)據(jù),即全局只有一個(gè) MainFrame 和一個(gè)DownTableModel,關(guān)鍵代碼入下: public class GlobalData { public static MainFrame globalmframe。 //全局 MainFrame public static DownTableModel globaltable。 //全局 TableModel } DownTableModel 模塊設(shè)計(jì) 模塊 UI 設(shè)計(jì) DownTableModel即一個(gè)顯示下載條目表格模型。 DownTableModel的實(shí)現(xiàn)是繼承一個(gè) AbstractTableModel類,繼承這個(gè)類必須實(shí)現(xiàn)它的一些方法: 湖南科技大學(xué)本科生畢業(yè)設(shè)計(jì)(論文) 19 getRowCount()、 getColumnCount()、 getValueAt()、 getColumnName();同時(shí)我們還要為表格的每一個(gè)列定義一個(gè)列名(定義一個(gè)名字的集合),同時(shí)將名字的集合傳到 getColumnName()這個(gè)方法,內(nèi)部會自動為每一列分配一個(gè)類名。關(guān)鍵代碼如下: final String[] names = {文件名 , 連接線程狀態(tài) , 文件大小 , 是否完成 , 下載百分比 ,下載速度 ,剩余時(shí)間 ,線程數(shù),URL,HTTP狀態(tài)碼 }。 //設(shè)定列名數(shù)組 private ArrayListObject[] tabledata = new ArrayListObject[]()。 private ArrayListURL urllist=new ArrayListURL()。 private URL url。 private Runnable run。 public DownTableModel(JTable table) { //構(gòu)造函數(shù) = table。 } //得到表格總的行數(shù) public int getRowCount() { return ()。 } public int getColumnCount() { //得到表格總的列數(shù) return 。 } public String getColumnName(int column) {//得到表格每列的名字 return names[column]。 } //得到表格某個(gè)具體單元格的值 public Object getValueAt(int rowIndex, int columnIndex) { return (rowIndex)[columnIndex]。 } 界面效果如圖 所示。 圖 DownTableModel 界面 模塊數(shù)據(jù)動態(tài)更新 由于隨著下載的進(jìn)行, Table中每列的值要不斷地變化,所以要對 table進(jìn)行動態(tài)更新。 湖南科技大學(xué)本科生畢業(yè)設(shè)計(jì)(論文) 20 添加一個(gè)下載就是增加一個(gè) Download對象( Download類后續(xù)介紹),添加一個(gè)下載條目的關(guān)鍵代碼如下: public boolean addRowDownload(Download down){ if(judgeUrl(down)){ //判斷 down對象的 URL是否合法 Object[] obj=()。 (obj)。 //添加一個(gè)下載項(xiàng) //AbstractTableModel里定義的函數(shù),更新表格 fireTableDataChanged()。 return true。 } else{ return false。 } } 刪除一個(gè)下載項(xiàng)目我們只需要了解刪除條目的行數(shù)( row值),刪除一個(gè)下載條目的關(guān)鍵代碼如下: public boolean removeRow(int row){ (row)。 //刪除一個(gè)下載項(xiàng) ()。//將 tabledata的容量調(diào)整為列表的當(dāng)前大 小 fireTableRowsDeleted(row, row)。 //更新表格 return true。 } 當(dāng)啟動一個(gè)下載任務(wù),系統(tǒng)必須給表格動態(tài)的設(shè)定一些列的值。如設(shè)定文件大小。同樣需要更新的還有:連接線程狀態(tài),是否完成,下載百分比, 剩余時(shí)間等。 設(shè)定下載文件大小關(guān)鍵代碼如下: //比較 table中 URL和傳入 download對象的 URL,若相等,則找到需要修改的下載項(xiàng) if(()[8].toString().equals(())){ float size=length/。 //得到文件實(shí)際大?。?KB) float temp=(int)(size*100)。 //舍去一些小數(shù)點(diǎn)后的位數(shù) String strsize=+(temp/100)+KB。 if(size){ //判斷文件大小是否大于 1024KB temp=(int)(size*100/1024)。 //得到文件實(shí)際大?。?MB) strsize=+ (temp/100)+MB。 } (i)[2]=strsize。 //給表格設(shè)定值 fireTableDataChanged()。//更新表格 i=()。 湖南科技大學(xué)本科生畢業(yè)設(shè)計(jì)(論文) 21 } } } 當(dāng)資源下載完成時(shí) ,我們需要對表格進(jìn)行唯一的操作就是將該下載項(xiàng)目從表格中移除。關(guān)鍵代碼如下: public void downOver(Download download) { for (int i = 0。 i ()。 i++) { Object obj=(i)[8]。 //獲取表格某項(xiàng)的 URL //比較 table中 URL和傳入 download對象的 URL,若相等,則找到需要刪除的下載項(xiàng) if(()[8].toString().equals(())){ removeRow(i)。 //從 table中移除該行 //從全局界面的 download集合中移除該下載對象 Download down=(i)。 fireTableDataChanged()。 //更新表格 } } NewDownload 模塊設(shè)計(jì) 模塊流程分析 根據(jù)需求分析 ,當(dāng)用戶點(diǎn)擊新建下載按鈕,則系統(tǒng)彈出一個(gè)新建下載對話框,里面包含一個(gè)輸入 url 的文本框,一個(gè)保存地址的文本框,一個(gè)保存文件名的文本框。同時(shí)還有三個(gè)按鈕(瀏覽、確實(shí)、取消),還有一個(gè)選擇線程數(shù)目下拉框。用戶首先需要 URL 地址,輸入 URL 地址后,系統(tǒng)會進(jìn)行判斷此 URL 地址是否合法,若不合法則要求用戶重新輸入新的 URL,輸入 URL 后系統(tǒng)會自動生成一個(gè)文件名,填充在保存文件名的文本框中。然后用戶可單擊瀏覽按鈕選擇存儲位置。接下來用戶可以修改保存文件名,接著是選擇線程數(shù)目。最后是用戶決定是否下載該資源,點(diǎn)擊確定或取消按鈕。若用戶點(diǎn)擊確定按鈕,則下載該資源,并回到主界面;若用戶點(diǎn)擊取消按鈕,則取 消下載該資源,同樣最后會回到主界面。 NewDownload 模塊流程圖如圖 所示: 湖南科技大學(xué)本科生畢業(yè)設(shè)計(jì)(論文) 22 用戶點(diǎn)擊新建下載按鈕輸入U(xiǎn)RLURL是否合法選擇存儲位置是否輸入文件名選擇下載線程數(shù)目確定下載是創(chuàng)建下載實(shí)體回到主界面否 圖 NewDownload 流程圖 湖南科技大學(xué)本科生畢業(yè)設(shè)計(jì)(論文) 23 模塊 UI 設(shè)計(jì) NewDownload 模塊可視化界面主要定義了如下一些組建: JLabel :用于裝載(容納)按鈕和文本框; JButton :定義瀏覽,確定,取消等按鈕; JTextField:定義用于輸入數(shù)據(jù)的文本框; JComboBox:定義選擇線程數(shù)的下拉框; 如圖 所示: 圖 新建下載 NewDownload 模塊界面關(guān)鍵代碼如下 : Times New Roman (new TitledBorder(新建下載 ))。 thread_count_box=new JComboBox()。//創(chuàng)建線程選擇下拉列表框 for (int i = 0。i 20。 i++) { (i+1)。 } (9)。 //線程數(shù)默認(rèn)為 10 } //為新建下載對話框設(shè)定組件布局采用絕對布局方式 public void addComponent(){ chooser = new JFileChooser(.)。 ()。 cont = ()。 (null)。 (null)。 (20,20,58,30)。 //絕對布局 (X軸、 Y軸、 width、 height) (20, 50, 62,30)。 (20,180,58,30)。 (20, 98, 95, 30)。 湖南科技大學(xué)本科生畢業(yè)設(shè)計(jì)(論文) 24 (125, 98, 300, 30)。 (88, 180, 50, 30)。 (88, 20, 460,30)。 (new FocusListener(){ public void focusGained(FocusEvent e){ } public void focusLost(FocusEvent e){ //當(dāng)失去焦點(diǎn)時(shí),系統(tǒng)會自動生成一個(gè)文件名,填充在保存文件名的文本框中 ……………… })。 (88, 55, 400,30)。 (false)。 (498, 55,70,30)。 (10, 10, 600, 400)。 (350, 200, 70, 30)。 (440, 200, 70, 30)。 //定義按鈕的監(jiān)聽事件 (new Cancel_AND_Sure_Lisener())。 (new Cancel_AND_Sure_Lisener())。 (new Cancel_AND_Sure_Lisener())。 //將各組件綁定到面板 JPanel (lab1)。 …………………… (pane_1)。
點(diǎn)擊復(fù)制文檔內(nèi)容
研究報(bào)告相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1