Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
* Save-Listing1 as>Download.java,
DownloadsTableModel.java
ProgressRenderer.java Download.java
*/
listing 1
import java.io.*;
import java.net.*;
import java.util.*;
this.url = url;
size = -1;
downloaded = 0;
status = DOWNLOADING;
download();
return url.toString();
return status;
status = PAUSED;
stateChanged();
status = DOWNLOADING;
stateChanged();
download();
status = CANCELLED;
stateChanged();
status = ERROR;
stateChanged();
thread.start();
// Download file.
HttpURLConnection connection =
(HttpURLConnection) url.openConnection();
connection.setRequestProperty("Range",
// Connect to server.
connection.connect();
if (connection.getResponseCode() / 100 != 2) {
error();
if (contentLength < 1) {
error();
if (size == -1) {
size = contentLength;
stateChanged();
file.seek(downloaded);
stream = connection.getInputStream();
byte buffer[];
} else {
if (read == -1)
break;
file.write(buffer, 0, read);
downloaded += read;
stateChanged();
if (status == DOWNLOADING) {
status = COMPLETE;
stateChanged();
} catch (Exception e) {
error();
} finally {
// Close file.
if (file != null) {
try {
file.close();
} catch (Exception e) {}
if (stream != null) {
try {
stream.close();
} catch (Exception e) {}
}
// Notify observers that this download's status has changed.
setChanged();
notifyObservers();
listing 2
import java.awt.*;
import java.awt.event.*;
import java.net.*;
import java.util.*;
import javax.swing.*;
import javax.swing.event.*;
implements Observer
public DownloadManager()
setTitle("Download Manager");
setSize(640, 480);
addWindowListener(new WindowAdapter() {
actionExit();
});
// Set up file menu.
fileMenu.setMnemonic(KeyEvent.VK_F);
KeyEvent.VK_X);
fileExitMenuItem.addActionListener(new ActionListener() {
actionExit();
});
fileMenu.add(fileExitMenuItem);
menuBar.add(fileMenu);
setJMenuBar(menuBar);
addPanel.add(addTextField);
addButton.addActionListener(new ActionListener() {
actionAdd();
});
addPanel.add(addButton);
// Set up Downloads table.
table.getSelectionModel().addListSelectionListener(new
ListSelectionListener() {
tableSelectionChanged();
});
table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
table.setDefaultRenderer(JProgressBar.class, renderer);
table.setRowHeight(
(int) renderer.getPreferredSize().getHeight());
downloadsPanel.setBorder(
BorderFactory.createTitledBorder("Downloads"));
downloadsPanel.setLayout(new BorderLayout());
downloadsPanel.add(new JScrollPane(table),
BorderLayout.CENTER);
pauseButton.addActionListener(new ActionListener() {
actionPause();
});
pauseButton.setEnabled(false);
buttonsPanel.add(pauseButton);
resumeButton.addActionListener(new ActionListener() {
actionResume();
});
resumeButton.setEnabled(false);
buttonsPanel.add(resumeButton);
cancelButton.addActionListener(new ActionListener() {
actionCancel();
});
cancelButton.setEnabled(false);
buttonsPanel.add(cancelButton);
clearButton.addActionListener(new ActionListener() {
actionClear();
});
clearButton.setEnabled(false);
buttonsPanel.add(clearButton);
getContentPane().setLayout(new BorderLayout());
getContentPane().add(addPanel, BorderLayout.NORTH);
getContentPane().add(downloadsPanel, BorderLayout.CENTER);
getContentPane().add(buttonsPanel, BorderLayout.SOUTH);
System.exit(0);
if (verifiedUrl != null) {
tableModel.addDownload(new Download(verifiedUrl));
} else {
JOptionPane.showMessageDialog(this,
JOptionPane.ERROR_MESSAGE);
if (!url.toLowerCase().startsWith("http://"))
return null;
try {
} catch (Exception e) {
return null;
if (verifiedUrl.getFile().length() < 2)
return null;
return verifiedUrl;
if (selectedDownload != null)
selectedDownload.deleteObserver(DownloadManager.this);
selectedDownload =
tableModel.getDownload(table.getSelectedRow());
selectedDownload.addObserver(DownloadManager.this);
updateButtons();
selectedDownload.pause();
updateButtons();
}
// Resume the selected download.
selectedDownload.resume();
updateButtons();
selectedDownload.cancel();
updateButtons();
clearing = true;
tableModel.clearDownload(table.getSelectedRow());
clearing = false;
selectedDownload = null;
updateButtons();
if (selectedDownload != null) {
switch (status) {
case Download.DOWNLOADING:
pauseButton.setEnabled(true);
resumeButton.setEnabled(false);
cancelButton.setEnabled(true);
clearButton.setEnabled(false);
break;
case Download.PAUSED:
pauseButton.setEnabled(false);
resumeButton.setEnabled(true);
cancelButton.setEnabled(true);
clearButton.setEnabled(false);
break;
case Download.ERROR:
pauseButton.setEnabled(false);
resumeButton.setEnabled(true);
cancelButton.setEnabled(false);
clearButton.setEnabled(true);
break;
pauseButton.setEnabled(false);
resumeButton.setEnabled(false);
cancelButton.setEnabled(false);
clearButton.setEnabled(true);
} else {
pauseButton.setEnabled(false);
resumeButton.setEnabled(false);
cancelButton.setEnabled(false);
clearButton.setEnabled(false);
updateButtons();
manager.setVisible(true);
listing 3
import java.util.*;
import javax.swing.*;
import javax.swing.table.*;
implements Observer
"Progress", "Status"};
new ArrayList<Download>();
download.addObserver(this);
downloadList.add(download);
downloadList.remove(row);
fireTableRowsDeleted(row, row);
return columnNames.length;
return columnNames[col];
return columnClasses[col];
}
// Get table's row count.
return downloadList.size();
switch (col) {
case 0: // URL
return download.getUrl();
case 1: // Size
case 2: // Progress
case 3: // Status
return Download.STATUSES[download.getStatus()];
return "";
fireTableRowsUpdated(index, index);
listing 4
import java.awt.*;
import javax.swing.*;
import javax.swing.table.*;
implements TableCellRenderer
super(min, max);