Avatar billede ttn- Nybegynder
04. april 2004 - 18:19 Der 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.
Avatar billede erikjacobsen Ekspert
04. april 2004 - 18:40 #1
Erklær blot
InputStream is;
OutputStream os;
før din if.
Avatar billede ttn- Nybegynder
04. april 2004 - 18:53 #2
Ah, det er jo mig, der ikke tænker mig om.

Smid et svar :)
Avatar billede erikjacobsen Ekspert
04. april 2004 - 18:57 #3
Ellers tak, jeg samler slet ikke på point.
Avatar billede ttn- Nybegynder
04. april 2004 - 19:45 #4
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

//Impoterer disse pakker
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.filechooser.*;
import java.io.*;
import java.util.*;

//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);
    }

    public void buildUI()
    {
        //Opretter menubarens, menues, menuobjekts mm.'s navne.
        JMenuBar menuBar;
        JMenu Files;
        JMenu Help;
        JMenuItem FilesItem;
        JMenuItem HelpItem;
       
        //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);
       
        HelpItem = new JMenuItem("About", KeyEvent.VK_A);
        HelpItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A, ActionEvent.ALT_MASK));
        HelpItem.getAccessibleContext().setAccessibleDescription("About");
        HelpItem.addActionListener(this);
        HelpItem.setActionCommand("About");
        Help.add(HelpItem);
    }
   
    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);
       
            System.out.println("Kopierer filen - Vent venligst");

            // 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();
    }
}
Avatar billede ttn- Nybegynder
04. april 2004 - 19:45 #5
Også skal du også have AboutPopUp.java:

//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);
    }
}
Avatar billede ttn- Nybegynder
04. april 2004 - 19:49 #6
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.
Avatar billede erikjacobsen Ekspert
04. april 2004 - 19:56 #7
Det har jeg ikke lyst til. Kan du ikke fortælle sådan ca. hvad og hvor der er noget galt?
Avatar billede ttn- Nybegynder
04. april 2004 - 20:36 #8
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..
Avatar billede ttn- Nybegynder
04. april 2004 - 20:37 #9
Når jeg integerer det i GUI
Avatar billede ttn- Nybegynder
04. april 2004 - 21:49 #10
Den skriver fx. at Steam connectionen er lukket og det handler om java.io.BufferInputStream... der kommer dog MANGE af de der
Avatar billede erikjacobsen Ekspert
04. april 2004 - 21:56 #11
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.
Avatar billede ttn- Nybegynder
04. april 2004 - 22:48 #12
Kan du lige skrive, hvor der så sker ændringer?
Avatar billede erikjacobsen Ekspert
04. april 2004 - 22:54 #13
Som jeg siger: der hvor du erklærer dem, fx:

        InputStream is = new FileInputStream(kopier);
Avatar billede ttn- Nybegynder
05. april 2004 - 11:50 #14
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
Avatar billede ttn- Nybegynder
30. juli 2004 - 16:01 #15
lukker
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester