Ideenanalyse:
Da es sowohl ein Operationspanel als auch eine Fortschrittsleiste geben muss, müssen zwei Formen, die die JFRame -Klasse erben, erscheinen.
Schauen Sie sich zunächst das aufgerufene Fortschrittsbalkenformular an. Aufgrund von Entwurfsdateioperationen müssen Ausnahmen gefangen werden. Erstellen Sie zunächst ein Dateiobjekt basierend auf der zu kopierenden Datei, und erstellen Sie ein Dateiobjekt basierend auf der gespeicherten Adresse der kopierten Datei. Erstellen Sie dann ein DateiOutputStream Datei. Definieren Sie das Byte -Array als nächst Verwenden Sie schließlich die Methode Close () der ProgressMonitorInputStream -Klasse, um den Eingabestream zu schließen. Es ist ersichtlich, dass diese Methode drei Parameter erfordert: ihr übergeordnetes Fenster wird angezeigt, die zu kopierende Dateiadresse und der Ordner, auf den der Ordner kopiert wird.
Der Code ist wie folgt:
ProgressMonitest.java:
Die Codekopie lautet wie folgt:
Paket cn.edu.xidian.crytoll;
import Java.io.FileInputStream;
import Java.io.*;
importieren javax.swing.jframe;
import Javax.swing.ProgressMonitorInputStream;
public class ProgressMonitest {
public void UseProgressMonitor (JFRAME -Rahmen, String Copypath, String NewPath) {
versuchen {
Datei Datei = neue Datei (Copypath);
Datei newfile = new Datei (NewPath);
FileOutputStream fop = new FileOutputStream (newfile);
InputStream in = new FileInputStream (Datei);
// Lesen Sie die Datei.
ProgressMonitorInputStream PM = New ProgressMonitorInputStream (
Frame, "Dateilesen, bitte warten ...", in);
int c = 0;
Byte [] Bytes = neues Byte [1024];
while ((c = PM.Read (Bytes))! = -1) {// Schleife, um die Datei zu lesen
fop.write (bytes, 0, c);
}
fop.close ();
PM.CLOSE ();
} catch (Ausnahme ex) {
ex.printstacktrace ();
}
}
}
3. Schauen Sie sich die Hauptform erneut an. JLabel und JTextField sind unnötig, dass die beiden Schaltflächen ausgewählt werden und Ordner auswählen. neu. Sein Onkel.
4. Erstellen Sie in der spezifischen Methode zum Starten der Kopie zuerst ein Thread -Objekt als neu GetText () -Methode der JTextField -Klasse erhält die zu kopierende Dateiadresse und den zu kopierenden Pfad und ruft dann die Methode in der Fortschrittsbalkenklasse auf.
Der Code ist wie folgt:
Die Codekopie lautet wie folgt:
Paket cn.edu.xidian.crytoll;
Import Java.awt.BorderLayout;
Import Java.awt.Desktop;
Import Java.awt.Dimension;
Import Java.awt.Eventqueue;
importieren java.awt.gridbagconstraints;
importieren java.awt.gridbaglayout;
import Java.awt.insets;
import Java.awt.event.ActionEvent;
import Java.awt.event.ActionListener;
Import Java.io.file;
importieren java.io.filenotfoundException;
Import Java.io.Filereader;
Import Java.io.FileWriter;
importieren java.io.ioException;
import Javax.swing.jbutton;
import Javax.swing.jfilechooser;
importieren javax.swing.jframe;
import Javax.swing.jlabel;
import Javax.swing.joptionpane;
import Javax.swing.jpanel;
importieren javax.swing.jtextfield;
import Javax.swing.border.EmptyBorder;
import Javax.swing.filechooser.FileNameExtensionSesionFilter;
öffentliche Klasse UsmonitorFrame erweitert JFrame implementiert Runnable {
/**
*
*/
Private statische endgültige lange Serialversionuid = 8674569541853793419L;
Private Jpanel ContentPane;
private JTextField FileField;
Private JTextField SearchTextField;
Private JTextField ErsatzEtextfield;
private Dateidatei;
Private JTextfield Textfield;
private jTextfield textfield_1;
/**
* Starten Sie die Anwendung.
*/
public static void main (String [] args) {
EventQueue.invokelater (new Runnable () {
public void run () {
versuchen {
UsermonitorFrame Frame = new UsermonitorFrame ();
Frame.SetVisible (True);
} catch (Ausnahme e) {
E. printstacktrace ();
}
}
});
}
/**
* Erstellen Sie den Rahmen.
*/
public usermonitorframe () {
setResizable (falsch);
setDefaultCloseOperation (jframe.exit_on_close);
Setbounds (100, 100, 501, 184);
Settitle ("Fortschrittsbalken verwenden, wenn Sie eine Datei lesen");
getContentPane (). setLayout (null);
JLabel Label = new JLabel ("/u6587/u4ef6/u5730/u5740/uff1a");
label.setBounds (10, 10, 70, 15);
getContentPane (). add (label);
textField = new JTextField ();
textfield.Setbounds (90, 7, 300, 21);
getContentPane (). Add (TextField);
textfield.setColumns (10);
Jbutton Button = new Jbutton ("/u9009/u62e9/u6587/u4ef6");
button.addactionListener (new actionListener () {
public void actionperformed (actionEvent e) {
do_button_actionperformed (e);
}
});
Taste.Setbounds (400, 6, 93, 23);
getContentPane (). add (Taste);
JLabel Label_1 = new JLabel ("/u590d/u5236/u5730/u5740/uff1a");
Label_1.SetBounds (10, 40, 70, 15);
getContentPane (). add (label_1);
textfield_1 = new JTextField ();
textfield_1.setBounds (90, 38, 300, 21);
getContentPane (). add (textfield_1);
textfield_1.setColumns (10);
Jbutton button_1 = new Jbutton ("/u9009/u62e9/u5730/u5740");
button_1.addactionListener (new actionListener () {
public void actionperformed (actionEvent e) {
do_button_1_actionperformed (e);
}
});
Button_1.Setbounds (400, 39, 93, 23);
getContentPane (). add (button_1);
Jbutton Button_2 = new Jbutton ("/u5f00/u59cb/u590d/u5236");
button_2.addactionListener (new actionListener () {
public void actionperformed (actionEvent e) {
do_copyButton_actionperformed (e);
}
});
Button_2.SetBounds (182, 69, 93, 23);
getContentPane (). add (button_2);
}
Protected void do_button_actionperformed (actionEvent e) {
JFilechoOser Chooser = new JFilechoOser ();
ChooSer.SetFileSelectionMode (jFilechoOser.files_only);
// Datei Öffnungsdialogfeld anzeigen
int option = chooser.showopendialog (this);
// Stellen Sie sicher
if (Option!
zurückkehren;
// Holen Sie sich das vom Benutzer ausgewählte Dateiobjekt ausgewählt
file = chooser.getSelectedFile ();
// Dateiinformationen im Textfeld anzeigen
textField.setText (Datei.toString ());
}
geschützte void do_button_1_actionperformed (actionEvent e) {
JFilechoOser Chooser = new JFilechoOser ();
ChooSer.SetFileSelectionMode (jFilechoOser.directories_only);
int option = chooser.showopendialog (this);
if (Option!
zurückkehren;
file = chooser.getSelectedFile ();
textfield_1.setText (file.toString ());
}
// Bestätigen Sie die Schaltfläche Kopieren Klicken Sie auf Ereignis
Protected void do_copyButton_actionPerformed (actionEvent arg0) {
Thread Thread = neuer Thread (this);
Thread.Start ();
}
// Verwenden Sie Multi-Threading-Technologie, um den Lesevorgang zu realisieren
@Override
public void run () {
ProgresorMonitortest Test = new ProgressMonitortest ();
String path = textField.getText ();
String Save = textfield_1.getText ();
test.useProgressMonitor (this, path, save+path.substring (Path.LastIndexof ("."), path.length ()));
}
}