04. april 2004 - 18:19Der er
14 kommentarer og 1 løsning
Hive informationer ud af en if-sætning
Hejsa
Er det muligt på en eller anden måde at få hevet informationer ud fra en if sætning? Jeg er nemlig igang med et program, hvor den man skal kunne vælge en fil, og derefter kopierer den et nyt sted hen og evt. med nyt navn - men når jeg prøver at få koden til at kopiere filen ind i GUI, så fucker det virkelig meget.
if (evt.getSource() == openButton) { //Sæt returnVal som fc.showOpenDialog... int returnVal = fc.showOpenDialog(fc);
//Og hvis returnVal = JFileChooser.APPROVE_OPTION if (returnVal == JFileChooser.APPROVE_OPTION) { //Så gør File file til en valgt fil File kopier = fc.getSelectedFile(); //Her åbner den rigtig filen og skriver det i loggen log.append("Kopierer: " + kopier.getName() + "." + newline);
InputStream is = new FileInputStream(kopier); } //Ellers else { //Skriv følgende log.append("Kopiering annulleret af brugeren" + newline); } //Log gør følgende log.setCaretPosition(log.getDocument().getLength());
}
//Ellers hvis getSource er det samme som saveButton else if (evt.getSource() == saveButton) { //Sæt returnVal som fc.showOpenDialog... int returnVal = fc.showSaveDialog(fc);
//Og hvis returnVal = JFileChooser.APPROVE_OPTION if (returnVal == JFileChooser.APPROVE_OPTION) { //Så gør File file til en valgt fil File kopierTil = fc.getSelectedFile(); //Gemmer filen og skriver det i loggen log.append("Kopierer den nye fil: " + kopierTil.getName() + "." + newline);
OutputStream os = new FileOutputStream(kopierTil); } //Ellers else { //Skriv i loggen at den stoppede med at save log.append("Kopieringen annulleret af brugeren." + newline); } //Log gør følgende log.setCaretPosition(log.getDocument().getLength()); }
Hvor det er InputStream is = new FileInputStream(kopier); og OutputStream os = new FileOutputStream(kopierTil); der er de informationer, jeg skal behandle...
Det kan dog lige siges, at jeg har på fornemmelsen på, at jeg nok skal omskrive det følgende lidt, da det nok ikke KAN gøre det, som jeg gerne vil have det.
Manuelle og semi-automatiske strategier for identitetsstyring virker - lige indtil nogen beder om dokumentation. For at undgå denne fare har DKTV taget kontrol over sin identitets- og adgangsstrategi.
Men kan du så hjælpe mig med det her. Det er nok bedst, hvis du lige kopierer det ind i et program, da det nok ellers kan virke lidt uoverskueligt(jeg har ikke fået delt det op i selvstændige filer endnu) Problemet er, at det ikke virker - men du kan jo selv se hvorfor, når du kører programmet!
//Følgende program er skrevet af Mikael Olai Milhøj //Alle rettighederne tilhører nævnte person
//Opretter klassen og arver fra JFrame public class GUI extends JFrame implements ActionListener { //Opretter to knapper - openButton og saveButton JButton openButton, saveButton; //Opretter TextArea log JTextArea log; //Opretter FileChooser fc JFileChooser fc; //Sætter String newline til at give en ny linie static private final String newline = "\n";
//Erklærer InputStream til is //Og OutputStream til os InputStream is; OutputStream os;
//Opretter en funktion ved navn GUI //Sætter vinduets størrelse til 1024x768 //Og gør det muligt at lukke vinduet ved at trykke på x'et i hjørnet. public GUI() { //Henter fra metode buildUI() buildUI();
//Henter fra FileChooser FileChooser();
//Sætter dialogen til at have standard look. JDialog.setDefaultLookAndFeelDecorated(true);
//Sætter vindue størrelsen til 500x300, titlen til kalender //og gør det muligt at lukke programmet ned ved at trykke "x" op i hjørnet setSize(500, 300); setTitle("Copy"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); }
//Sætter menuBar til at være JMenuBar() menuBar = new JMenuBar(); setJMenuBar(menuBar);
//Laver en "Filer" som den første i menubaren //Opretter også genvejstast til Alt+F Files = new JMenu("Files"); Files.setMnemonic(KeyEvent.VK_F); Files.getAccessibleContext().setAccessibleDescription("Filer"); menuBar.add(Files);
//Laver en "Help" som den anden i menubaren //Opretter genvejstast til Alt+H Help = new JMenu("Help"); Help.setMnemonic(KeyEvent.VK_H); Help.getAccessibleContext().setAccessibleDescription("Help"); menuBar.add(Help);
//Sætter et menupunkt til "Luk programmet" og lukker den ved tryk. //Opretter også en genvejstast, der kan bruges, hvis du er inde i selve undermenuen //Denne er ALT+L //Der er også en, du kan bruge, uden du er inde i undermenuen. Denne er ALT+ESC. FilesItem = new JMenuItem("Exit", KeyEvent.VK_L); FilesItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, ActionEvent.ALT_MASK)); FilesItem.getAccessibleContext().setAccessibleDescription("Exit"); FilesItem.addActionListener(this); FilesItem.setActionCommand("Exit"); Files.add(FilesItem);
public void FileChooser() { log = new JTextArea(5,20); log.setMargin(new Insets(5,5,5,5)); log.setEditable(false); JScrollPane logScrollPane = new JScrollPane(log);
//Create a file chooser fc = new JFileChooser();
//Laver en knap, hvor der står "Kopier" på openButton = new JButton("Kopier"); openButton.addActionListener(this);
//Laver en knap, hvor der står "Kopier til" på. saveButton = new JButton("Kopier til"); saveButton.addActionListener(this);
//Laver et JPanel, der hedder buttonPanel, hvor de to knapper bliver tilføjet JPanel knapPanel = new JPanel(); //use FlowLayout knapPanel.add(openButton); knapPanel.add(saveButton);
//Tilføjer buttonPanel og logScrollPane til ContentPane. getContentPane().add(knapPanel, BorderLayout.PAGE_START); getContentPane().add(logScrollPane, BorderLayout.CENTER); }
public void actionPerformed(ActionEvent evt) { //Hvis eventSource ikke er lig nul Object eventSource = evt.getActionCommand(); if (eventSource != null) { //Hvis eventSource er = Exit, så luk programmet if(eventSource.equals("Exit")) { System.exit(0); } //Eller hvis eventSource er = About, så åben AboutPopUp else if(eventSource.equals("About")) { //Henter fra AboutPopUp.java og viser det AboutPopUp b = new AboutPopUp(); b.show(); } }
//Hvis e.getSource() er det samme som openButton if (evt.getSource() == openButton) { //Sæt returnVal som fc.showOpenDialog... int returnVal = fc.showOpenDialog(fc);
//Og hvis returnVal = JFileChooser.APPROVE_OPTION if (returnVal == JFileChooser.APPROVE_OPTION) { //Så gør File file til en valgt fil File kopier = fc.getSelectedFile(); //Her åbner den rigtig filen og skriver det i loggen log.append("Kopierer: " + kopier.getName() + "." + newline);
try { InputStream is = new FileInputStream(kopier); } //Kaster en FileNotFoundException catch (FileNotFoundException u) { System.out.println("Filen kunne ikke findes."); }
//Kaster en Exception, hvis der er en fejl ved læsning af fil. catch (Exception u) { System.out.println("Fejl ved læsning af fil."); u.printStackTrace(); }
} //Ellers else { //Skriv følgende log.append("Kopiering annulleret af brugeren" + newline); } //Log gør følgende log.setCaretPosition(log.getDocument().getLength());
}
//Ellers hvis getSource er det samme som saveButton else if (evt.getSource() == saveButton) { //Sæt returnVal som fc.showOpenDialog... int returnVal = fc.showSaveDialog(fc);
//Og hvis returnVal = JFileChooser.APPROVE_OPTION if (returnVal == JFileChooser.APPROVE_OPTION) { //Så gør File file til en valgt fil File kopierTil = fc.getSelectedFile(); //Gemmer filen og skriver det i loggen log.append("Kopierer den nye fil: " + kopierTil.getName() + "." + newline);
try { OutputStream os = new FileOutputStream(kopierTil); } //Kaster en FileNotFoundException u catch(FileNotFoundException u) { System.out.println("Stien findes ikke"); }
//Kaster en Exception, hvis der er en fejl ved læsning af fil. catch (Exception u) { System.out.println("Fejl ved læsning af fil."); u.printStackTrace(); }
} //Ellers else { //Skriv i loggen at den stoppede med at save log.append("Kopieringen annulleret af brugeren." + newline); } //Log gør følgende log.setCaretPosition(log.getDocument().getLength()); } try { //Sætter is til at være BufferedInputStream(is) //Sætter os til at være BufferedOutputStream(os) is = new BufferedInputStream(is); os = new BufferedOutputStream(os);
// husk starttidpunkt, så vi kan måle hvor lang tid det tager long starttid = System.currentTimeMillis();
//Sætter arrayet data til at være 8192. Derefter kopierer den med det antal kb. byte[] data = new byte[8192]; // 8 kilobyte int lgd = is.read(data); while (lgd != -1) { os.write(data, 0, lgd); lgd = is.read(data); }
//Lukker forbindelsernr og finder ud af, hvor langt tid det tog. is.close(); os.close(); long sluttid = System.currentTimeMillis(); } //Fanger en Exception, hvis der er en fejl ved læsning af fil. catch (Exception u) { System.out.println("Fejl ved læsning af fil."); u.printStackTrace(); }
}
//main metode med tilhørende visning af funktion. public static void main(String args[]) { GUI a = new GUI(); a.show(); } }
//Impoterer disse pakker import javax.swing.*; import java.awt.*;
public class AboutPopUp extends JFrame { //Opretter AboutPopUp public AboutPopUp() { //Sætter ContentPane til at have BorderLayout getContentPane().setLayout(new BorderLayout());
String about = "This program is made by Mikael Olai Milhoj 2004.The program is made in Sun Java 1.4.2."; JLabel label = new JLabel(about); getContentPane().add(label, BorderLayout.CENTER);
//Sætter vindue størrelsen til 500x300, titlen til kalender //og gør det muligt at lukke programmet ned ved at trykke "x" op i hjørnet setSize(200, 200); setTitle("About"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } }
Kan lige siges, at det programmet skal kunne, det er, at den skal kunne vælge en fil, hvorefter brugeren skal kunne vælge, hvor han vil have den kopieret hen og under hvilket navn.
Hehe, den giver mig en del meddelser i min CMD Prompt, når jeg kopierer/kopierer til... Jeg tror, det har noget med, hvordan mit kopieringsscript virker..
Det var da dejligt du ville antyde hvad der er galt. Jeg har set dine indlæg før, men så længe der ikke står noget om hvad der er galt, taler du for døve ører.
Du skal kun erklære dine to streams som attributer i klassen, og fjerne dine erklæringer inde i dine metoder.
Jeg har fjernet erklæringerne nu, men det fungerer stadig ikke. Jeg får stadig de mange fejl ved en NullPointerException - jeg har på fornemmelsen, at den måde den loader filen og derefter gemmer den på er forkert bygget op i forhold til, hvordan jeg har lavet selve mit kopieringsprogram
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.