Wyciek pamięci problem

0

Mój problem polega że mam dwa zółte wykrzykniki mówiące o wycieku pamięci..Dodałem coś takiego-

 @SuppressWarnings("LeakingThisInConstructor")

ale błąd nie zniknoł.W aplikacji po uruchomieniu jednego z buttonów obsługuje mi dane z dwóch buttonów.

przycisk = new JButton("Odczytaj", new ImageIcon("images/7.gif"));
** przycisk.addActionListener(this);**
szukaj=new JButton("Szukaj", new ImageIcon("images/analiza.png")); 
** szukaj.addActionListener(this);**

Cały kod.

package projekt;

/**
 *
 * @author ela
 */



import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import javax.swing.*;
import java.io.*; // usługi wejścia/wyjścia 

import java.net.URL;
import java.awt.event.*;
import java.util.regex.*;//Do obsługi wyraŜeń regularnych słuŜą klasy Matcher i Patternz pakietu java.util.rege
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.net.MalformedURLException; 


public class Okno3 extends JPanel implements ActionListener
{ 
    
JButton przycisk1,przycisk2,przycisk,szukaj,znajdz;      
  
JTextField pole,pole1,pole2,wrzozectxt,url;

JTextArea poletekstowe2=new JTextArea();// JTextArea – wielowierszowe pole tekstowe
JTextArea poletekstowe=new JTextArea();

JScrollPane panelprzewijania=new JScrollPane(poletekstowe); 

JScrollPane panelprzewijania2=new JScrollPane(poletekstowe2);

//------------------------------------------------------------------------------


    @SuppressWarnings("LeakingThisInConstructor")
public Okno3()        
{    
setLayout(null);//menedżer rozkładu (layout)Zmiana menedżera rozkładu – metoda setLayout
setPreferredSize(new Dimension(640,445));
setBackground(new Color(210,246,255));   
Font font = new Font("Verdana", Font.BOLD, 12);
poletekstowe2.setFont(font);
poletekstowe2.setForeground(Color.BLUE); 



//zmienna przycisk zawiera referencje do obiektu typu button  na razie
//nie wskazuje na zaden obiekt.dopiero uzycie wyrazenia new tworzy obiekt a
//zwrócone przez new referencja jest podstawiana na zmienna przycisk
 przycisk = new JButton("Odczytaj", new ImageIcon("images/7.gif"));
 przycisk.addActionListener(this);
 przycisk1 = new JButton("Otwórz",new ImageIcon("images/otwórz.png")); 
 przycisk2 = new JButton("Zapisz",new ImageIcon("images/zapisz.png")); 
 znajdz = new JButton("URL", new ImageIcon("images/url1.png")); 
 szukaj=new JButton("Szukaj", new ImageIcon("images/analiza.png")); 
 szukaj.addActionListener(this);
 
 url = new JTextField(" http://chomikuj.pl/File.aspx?id=1388448016"); //poletekstowe//  ps-http://chomikuj.pl/File.aspx?id=1388448397
 
 wrzozectxt=new JTextField();
 pole = new JTextField();
 pole1 = new JTextField();
 pole2 = new JTextField();
 panelprzewijania=new JScrollPane(poletekstowe,JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
 panelprzewijania2=new JScrollPane(poletekstowe2,JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
 
add(pole);
pole.setBounds(20,10,270,30);//setBounds(int x, int y, int szerokość, int wysokość)

add(przycisk);
przycisk.setBounds(295,10,150,30); 

add(wrzozectxt);
wrzozectxt.setBounds(20,50,270,30);

add(szukaj);
szukaj.setBounds(295,50,150,30); 

add(url);
url.setBounds(20,90,270,30);

add(znajdz);
znajdz.setBounds(295,90,150,30); 
 
add(przycisk1);
przycisk1.setBounds(20,125,105,30); 
 
add(przycisk2);
przycisk2.setBounds(238,125,105,30);  

add(pole1);
pole1.setBounds(130,125,105,30); 
 
add(pole2);
pole2.setBounds(348,125,105,30); 

add(panelprzewijania);
panelprzewijania.setBounds(20,165,270,200); 

add(panelprzewijania2);
panelprzewijania2.setBounds(300,165,270,200); 

//------------------------------------------------------------------------------



przycisk1.addActionListener(new ActionListener() 
{ 
            @Override
public void actionPerformed(ActionEvent e)  {
    String nazwa=pole1.getText();
    String linia;
    try{
        BufferedReader br=new BufferedReader(new FileReader(nazwa));
        while((linia=br.readLine())!=null){
            poletekstowe.append(linia+"\n");
        }
        br.close();
    }catch(Exception ek){}
}
 }); 
add(przycisk1); 
        
 
przycisk2.addActionListener(new ActionListener() 
{ 
            @Override
public void actionPerformed(ActionEvent e)  {
    String nazwa=pole2.getText();
    String tekst=poletekstowe.getText();
    try{
        BufferedWriter bw=new BufferedWriter(new FileWriter(nazwa));
       bw.write(tekst,0,tekst.length());
       bw.flush();
       bw.close();
    }catch(Exception ek){}
}
 }); 
add(przycisk2);


 

//----------------------URL-----------------------------------------------------
//------------------------------------------------------------------------------


znajdz.addActionListener(new ActionListener() 
{ 
            @Override
public void actionPerformed(ActionEvent e)  
{  
pobierzkodzródłowy(url.getText()); //poletekstowe 
 }  
 }); 
add(znajdz); 
 } 
 private void pobierzkodzródłowy(String url) 
    { 
 try 
  {            
URL strona = new URL(url); //tworzenie adresu URL

BufferedReader czytac = new BufferedReader (new InputStreamReader ( strona.openStream ()));
String liniawejsciowa;

while((liniawejsciowa = czytac.readLine()) != null)    
{ 
 poletekstowe.append(liniawejsciowa+"\n"); 
} 
} 
catch(MalformedURLException ex) //Podczas tworzenia obiektu URL może zostać zgłoszony wyjątek MalformedULRException. 
{
poletekstowe.setText(url + " Nie jest prawidłowy adres URL. Proszę wpisać adres URL począwszy od http://"); 
} 
catch(IOException ie) 
{ 
}
}
 
 
 
 //---------------Wrzozec---------------------------------------------------------
 
 //To nie jest nic innego ja zbior wszystkich trafien z zastosowania regEx na str.
//Rozpoznane zostaly 4 grupy: 1 2 3 i 4.5 . m.find() zwraca nastepne trafienie. String z=m.group() pokazuje ta grupe
//-------------------------------------------------------------------------------- 
  
 //
//wyraŜenia regularne (ang. regular expressions, regexp
//lub regexes)- sposób opisywania tekstu poprzez 
//dopasowanie wzorców
 //Nie posiada konstruktorów a do tworzenia obiektu uŜywa się
//metody matcher() klasy Patter
 
    @Override
public void actionPerformed(ActionEvent e)
 { //Uchwyt otwarty działania przycisku.          
String wrzozec=wrzozectxt.getText();// // przeszukiwany (dopasowywany) tekst
                 // pobierany w dialogach wejściowych, w pętli
String ciąg_do_przeszukania=poletekstowe.getText();


// Klasa Pattern nie ma konstruktorów a obiekt klasy zwracany 
//jest przez statyczną metodę compile(), której argumentem jest 
//ciąg znaków z wyraŜeniem regularnym; compile powoduje 
//transformację wyraŜenia regularnego do wzorca, np.:
//Pattern wzorzec/=/Pattern.compile("wyraŜenie_regularne")
//utworzeniewzorcaregex
// Pattern.CASE_INSENSITIVE(?i)Porównania liter bez uwzględnienia ich wielkości
// Pattern.MULTILINE(?m)Pozwala na dopasowanie ^ i $ na początku i na końcu wierszy (separowanych znakiem końca wiersza) 
//Pattern.Multiline Metaznaki  oraz 3 pasują do miejsc położonych tuż obok osadzonych znaków końca wiersz
//Pattern.Case_Insensitive Podczas dopasowywania nie będzie uwzględnianawielkość liter należących do kodu ASCII
 //Swobodne stosowanie znaków biaych: Pattern.COMMENTS
//Ignorowanie wielkoci liter: Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE
//Dopasowywanie znaków podziau wiersza do kropek: Pattern.DOTALL
//Dopasowywanie znaków podziau wiersza do karet i znaków dolara: Pattern.MULTILINE




Pattern wzorzec=Pattern.compile(wrzozec, Pattern.CASE_INSENSITIVE |Pattern.MULTILINE  );// |lub or(gif)|(jpg) - pasuje do gif lub jpg 
 //(U|u)(l|lica) (3-go|Trzeciego) Maja – pasuje do ul 3-, Podwzorzec moŜe być zamknięty w niepodzielnej grupie za 
//pomocą nawiasów ( ). W ten sposób moŜna uŜyć gałęzi nie tylko dla całego wzorca, ale równieŜ dla jego fragmentów np
//rozgałęzianie  [|] – oznacza „lub”, „OR” i pozwala na łączenie wielu wyraŜeń w jedno, do którego pasuje //dowolne z wyraŜeń składowych np

 //utworzeniesekwencjizawierajacej wszystkiepodciągi
//pasującedowzorcawyszukanewpodanymciągu
 Matcher sekwencja=wzorzec.matcher(ciąg_do_przeszukania);// Metoda matcher() klasy Pattern zwraca obiekt klasy Matcher; 
//argumentem metody jest ciąg znaków w którym będzie //poszukiwany wzorzec, np.:Matcher sekwencja=wzorzec.matcher("ciąg_do_przeszukania")
 
 
//pobranieposzczególnychpodciągówzsekwencji
// sposób próbuje dopasować cały ciąg wejściowy do wzorca.
 // Nie posiada konstruktorów a do tworzenia obiektu uŜywa się
//pozwala na określenie czy w określonym ciągu znakowym, da się wyszukać podciąg zgodny ze wzorcem dopasowania
while(sekwencja.find())//Prawda, jeśli wzór można znaleźć w temacie ciąg znaków. Pierwszy numer zaczyna się od próby na początku łańcucha. 
    //Kolejne wywołania rozpocznie się po ostatnim znaku wcześniej dopasowane, co sprawia, że ​​dobre dla pętli while.
//sekwencyjne wyszukiwanie za pomocą metody find
 // Matcher.find() zwraca prawdę, jeśli znaleziono dopasowania.  
    
{ //poletekstowe2.append(sekwencja.group());//wynik
 //poletekstowe2.append("\n");
    //Grupy Przechwytywanie są numerowane licząc ich nawiasach otwarcia od lewej do prawej. Aby dowiedzieć się, ile grup występują w wyrażeniu, należy zadzwonić pod groupCount() metoda na matcher obiektu.  groupCount() 
    //Metoda zwraca int pokazujący liczbę grup przechwytywania obecne w matcher-sekwencja wzorca.
//=zwykłe przypisanie,wartosc=wyraz
// Matcher.groupCount (): Metoda ta liczy dopasowany łańcuch lub tekst danej grupy tekstu lub ciąg znaków.
//  Matcher.groupCount() zwraca liczbę grup przechwytywania w strukturze niezależnie od tego czy grupy przechwytywania faktycznie udział w meczu.    
int liczbagrup=sekwencja.groupCount();//liczba grup//int groupCount () Zwraca liczbę grup przechwytywania w tym matcher wzorca.

//poletekstowe2.append("liczba grup w wyrażeniu:"+liczbagrup);
//poletekstowe2.append("\n");
//1)zmiennej iteracyjnej i przypisujemy wartosc 0,poniewaz chcemy aby liczby były wyswietlane od 0.
//2)w warunku okreslamy ze petla ma działac dotąd az zmienna iteracyjna bedzie mniejsza lub równa liczbie grup
//3)w kazdym przebiegu petli nakazujemy równiez zwiekszenie wartosci zmiennej i o 1
for(int i=0;i<=liczbagrup;i++) 
{//wprowadzamy zawartosc wszystkich grup
    //Grupa zera zawsze oznacza całe wyrażenie.
 //mniejsze lub równe wyraz<=wyraz
    
  //w kazdej petli wywołujemy tez metode append wyswietlająca wartosc zmiennej i.
    //petla sprawdza czy wartoscjest mniejsza lub równa liczbie grup.poniewaz warunek jest spełniony wyswietli na ekranie wartosc równą
    //1 nastepnie jest inkrementowana zwiekszana o 1 i ponowne sprawdzane są wszystkie warunki.efekcie program wyswietli liczbę kolejnych grub. 
  poletekstowe2.append("grupa  "+i+":"+sekwencja.group(i)+"\n");
 poletekstowe2.append("\n");
  //\n  Zawiera tekst odpowiadający -tej grupie przechwytujące
 //sekwencja group Ciąg znaków, który został dopasowany.
  
}}

//------------------------------------------------------------------------------
przycisk.addActionListener(new ActionListener() 
{ 
            @Override
public void actionPerformed(ActionEvent e){
        
String nazwa=pole.getText();
try{
          
ObjectInputStream ois=new ObjectInputStream(new FileInputStream(nazwa));
Planeta planeta=(Planeta)ois.readObject();

poletekstowe.append("Planeta:--"+planeta.getNazwa()+".\n");
poletekstowe.append("Średnica:--"+planeta.getSrednica()+"km.\n");
poletekstowe.append("Długość lat ziemskich:--"+planeta.getDlugoscRoku()+".\n");

ois.close();
}catch (Exception ek){}
{ 
} 
} 
}); 
}
}

 
0

To jest chyba esencja zdania "jak nie należy pisać programów w javie". W twoim kodzie nie widać absolutnie nic. Wiesz że czasem warto coś podzielić na kawałki?
Żółte wykrzykniki to warningi ale ja nie bardzo widzę skąd je niby masz. Jedyne czego brakowało to serial version id ze względu na serializację. Tak więc "pics or it didn't happen"
Nie robi się klas z serii "człowiek orkiestra". Albo twoja klasa jest Panelem albo jest ActionListenerem. Zapewniam cię ze od napisania nowej klasy się nie umiera.
Jeśli musisz pisać takie długie komentarze to znaczy że na pewno coś robisz źle. Na moje oko to ten kod ktoś ci napisał a te komentarze są po to żebyś cokolwiek mógł z tego zrozumieć.
Ale masz, chociaż ci to sformatuję skoro i tak eclipse już to zrobił:

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.ObjectInputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;

public class Okno3 extends JPanel implements ActionListener {
    private static final long serialVersionUID = 1L;

    JButton przycisk1, przycisk2, przycisk, szukaj, znajdz;
    JTextField pole, pole1, pole2, wrzozectxt, url;
    JTextArea poletekstowe2 = new JTextArea();// JTextArea – wielowierszowe pole tekstowe
    JTextArea poletekstowe = new JTextArea();
    JScrollPane panelprzewijania = new JScrollPane(poletekstowe);
    JScrollPane panelprzewijania2 = new JScrollPane(poletekstowe2);

    // ------------------------------------------------------------------------------

    public Okno3() {
        setLayout(null);// menedżer rozkładu (layout)Zmiana menedżera rozkładu – metoda setLayout
        setPreferredSize(new Dimension(640, 445));
        setBackground(new Color(210, 246, 255));
        Font font = new Font("Verdana", Font.BOLD, 12);
        poletekstowe2.setFont(font);
        poletekstowe2.setForeground(Color.BLUE);

        // zmienna przycisk zawiera referencje do obiektu typu button na razie
        // nie wskazuje na zaden obiekt.dopiero uzycie wyrazenia new tworzy obiekt a
        // zwrócone przez new referencja jest podstawiana na zmienna przycisk
        przycisk = new JButton("Odczytaj", new ImageIcon("images/7.gif"));
        przycisk.addActionListener(this);
        przycisk1 = new JButton("Otwórz", new ImageIcon("images/otwórz.png"));
        przycisk2 = new JButton("Zapisz", new ImageIcon("images/zapisz.png"));
        znajdz = new JButton("URL", new ImageIcon("images/url1.png"));
        szukaj = new JButton("Szukaj", new ImageIcon("images/analiza.png"));
        szukaj.addActionListener(this);
        url = new JTextField(" http://chomikuj.pl/File.aspx?id=1388448016"); // poletekstowe//
                                                                             // ps-http://chomikuj.pl/File.aspx?id=1388448397
        wrzozectxt = new JTextField();
        pole = new JTextField();
        pole1 = new JTextField();
        pole2 = new JTextField();
        panelprzewijania = new JScrollPane(poletekstowe, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
                JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
        panelprzewijania2 = new JScrollPane(poletekstowe2, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
                JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
        add(pole);
        pole.setBounds(20, 10, 270, 30);// setBounds(int x, int y, int szerokość, int wysokość)
        add(przycisk);
        przycisk.setBounds(295, 10, 150, 30);

        add(wrzozectxt);
        wrzozectxt.setBounds(20, 50, 270, 30);

        add(szukaj);
        szukaj.setBounds(295, 50, 150, 30);

        add(url);
        url.setBounds(20, 90, 270, 30);

        add(znajdz);
        znajdz.setBounds(295, 90, 150, 30);

        add(przycisk1);
        przycisk1.setBounds(20, 125, 105, 30);

        add(przycisk2);
        przycisk2.setBounds(238, 125, 105, 30);

        add(pole1);
        pole1.setBounds(130, 125, 105, 30);

        add(pole2);
        pole2.setBounds(348, 125, 105, 30);

        add(panelprzewijania);
        panelprzewijania.setBounds(20, 165, 270, 200);

        add(panelprzewijania2);
        panelprzewijania2.setBounds(300, 165, 270, 200);

        // ------------------------------------------------------------------------------

        przycisk1.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                String nazwa = pole1.getText();
                String linia;
                try {
                    BufferedReader br = new BufferedReader(new FileReader(nazwa));
                    while ((linia = br.readLine()) != null) {
                        poletekstowe.append(linia + "\n");
                    }
                    br.close();
                } catch (Exception ek) {
                }
            }
        });
        add(przycisk1);

        przycisk2.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                String nazwa = pole2.getText();
                String tekst = poletekstowe.getText();
                try {
                    BufferedWriter bw = new BufferedWriter(new FileWriter(nazwa));
                    bw.write(tekst, 0, tekst.length());
                    bw.flush();
                    bw.close();
                } catch (Exception ek) {
                }
            }
        });
        add(przycisk2);

        // ----------------------URL-----------------------------------------------------
        // ------------------------------------------------------------------------------

        znajdz.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                pobierzkodzródłowy(url.getText()); // poletekstowe
            }
        });
        add(znajdz);
    }

    private void pobierzkodzródłowy(String url) {
        try {
            URL strona = new URL(url); // tworzenie adresu URL

            BufferedReader czytac = new BufferedReader(new InputStreamReader(strona.openStream()));
            String liniawejsciowa;

            while ((liniawejsciowa = czytac.readLine()) != null) {
                poletekstowe.append(liniawejsciowa + "\n");
            }
        } catch (MalformedURLException ex) // Podczas tworzenia obiektu URL może zostać zgłoszony wyjątek
                                           // MalformedULRException.
        {
            poletekstowe.setText(url + " Nie jest prawidłowy adres URL. Proszę wpisać adres URL począwszy od http://");
        } catch (IOException ie) {
        }
    }

    // ---------------Wrzozec---------------------------------------------------------

    // To nie jest nic innego ja zbior wszystkich trafien z zastosowania regEx na str.
    // Rozpoznane zostaly 4 grupy: 1 2 3 i 4.5 . m.find() zwraca nastepne trafienie. String z=m.group() pokazuje ta
    // grupe
    // --------------------------------------------------------------------------------

    //
    // wyraŜenia regularne (ang. regular expressions, regexp
    // lub regexes)- sposób opisywania tekstu poprzez
    // dopasowanie wzorców
    // Nie posiada konstruktorów a do tworzenia obiektu uŜywa się
    // metody matcher() klasy Patter

    @Override
    public void actionPerformed(ActionEvent e) { // Uchwyt otwarty działania przycisku.
        String wrzozec = wrzozectxt.getText();// // przeszukiwany (dopasowywany) tekst
        // pobierany w dialogach wejściowych, w pętli
        String ciąg_do_przeszukania = poletekstowe.getText();

        // Klasa Pattern nie ma konstruktorów a obiekt klasy zwracany
        // jest przez statyczną metodę compile(), której argumentem jest
        // ciąg znaków z wyraŜeniem regularnym; compile powoduje
        // transformację wyraŜenia regularnego do wzorca, np.:
        // Pattern wzorzec/=/Pattern.compile("wyraŜenie_regularne")
        // utworzeniewzorcaregex
        // Pattern.CASE_INSENSITIVE(?i)Porównania liter bez uwzględnienia ich wielkości
        // Pattern.MULTILINE(?m)Pozwala na dopasowanie ^ i $ na początku i na końcu wierszy (separowanych znakiem końca
        // wiersza)
        // Pattern.Multiline Metaznaki  oraz 3 pasują do miejsc położonych tuż obok osadzonych znaków końca wiersz
        // Pattern.Case_Insensitive Podczas dopasowywania nie będzie uwzględnianawielkość liter należących do kodu ASCII
        // Swobodne stosowanie znaków biaych: Pattern.COMMENTS
        // Ignorowanie wielkoci liter: Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE
        // Dopasowywanie znaków podziau wiersza do kropek: Pattern.DOTALL
        // Dopasowywanie znaków podziau wiersza do karet i znaków dolara: Pattern.MULTILINE

        Pattern wzorzec = Pattern.compile(wrzozec, Pattern.CASE_INSENSITIVE | Pattern.MULTILINE);// |lub or(gif)|(jpg) -
                                                                                                 // pasuje do gif lub
                                                                                                 // jpg
        // (U|u)(l|lica) (3-go|Trzeciego) Maja – pasuje do ul 3-, Podwzorzec moŜe być zamknięty w niepodzielnej grupie
        // za
        // pomocą nawiasów ( ). W ten sposób moŜna uŜyć gałęzi nie tylko dla całego wzorca, ale równieŜ dla jego
        // fragmentów np
        // rozgałęzianie [|] – oznacza „lub”, „OR” i pozwala na łączenie wielu wyraŜeń w jedno, do którego pasuje
        // //dowolne z wyraŜeń składowych np

        // utworzeniesekwencjizawierajacej wszystkiepodciągi
        // pasującedowzorcawyszukanewpodanymciągu
        Matcher sekwencja = wzorzec.matcher(ciąg_do_przeszukania);// Metoda matcher() klasy Pattern zwraca obiekt klasy
                                                                  // Matcher;
        // argumentem metody jest ciąg znaków w którym będzie //poszukiwany wzorzec, np.:Matcher
        // sekwencja=wzorzec.matcher("ciąg_do_przeszukania")

        // pobranieposzczególnychpodciągówzsekwencji
        // sposób próbuje dopasować cały ciąg wejściowy do wzorca.
        // Nie posiada konstruktorów a do tworzenia obiektu uŜywa się
        // pozwala na określenie czy w określonym ciągu znakowym, da się wyszukać podciąg zgodny ze wzorcem dopasowania
        while (sekwencja.find())// Prawda, jeśli wzór można znaleźć w temacie ciąg znaków. Pierwszy numer zaczyna się od
                                // próby na początku łańcucha.
        // Kolejne wywołania rozpocznie się po ostatnim znaku wcześniej dopasowane, co sprawia, że ​​dobre dla pętli
        // while.
        // sekwencyjne wyszukiwanie za pomocą metody find
        // Matcher.find() zwraca prawdę, jeśli znaleziono dopasowania.

        { // poletekstowe2.append(sekwencja.group());//wynik
          // poletekstowe2.append("\n");
          // Grupy Przechwytywanie są numerowane licząc ich nawiasach otwarcia od lewej do prawej. Aby dowiedzieć się,
          // ile grup występują w wyrażeniu, należy zadzwonić pod groupCount() metoda na matcher obiektu. groupCount()
          // Metoda zwraca int pokazujący liczbę grup przechwytywania obecne w matcher-sekwencja wzorca.
          // =zwykłe przypisanie,wartosc=wyraz
          // Matcher.groupCount (): Metoda ta liczy dopasowany łańcuch lub tekst danej grupy tekstu lub ciąg znaków.
          // Matcher.groupCount() zwraca liczbę grup przechwytywania w strukturze niezależnie od tego czy grupy
          // przechwytywania faktycznie udział w meczu.
            int liczbagrup = sekwencja.groupCount();// liczba grup//int groupCount () Zwraca liczbę grup przechwytywania
                                                    // w tym matcher wzorca.

            // poletekstowe2.append("liczba grup w wyrażeniu:"+liczbagrup);
            // poletekstowe2.append("\n");
            // 1)zmiennej iteracyjnej i przypisujemy wartosc 0,poniewaz chcemy aby liczby były wyswietlane od 0.
            // 2)w warunku okreslamy ze petla ma działac dotąd az zmienna iteracyjna bedzie mniejsza lub równa liczbie
            // grup
            // 3)w kazdym przebiegu petli nakazujemy równiez zwiekszenie wartosci zmiennej i o 1
            for (int i = 0; i <= liczbagrup; i++) {// wprowadzamy zawartosc wszystkich grup
                                                   // Grupa zera zawsze oznacza całe wyrażenie.
                                                   // mniejsze lub równe wyraz<=wyraz

                // w kazdej petli wywołujemy tez metode append wyswietlająca wartosc zmiennej i.
                // petla sprawdza czy wartoscjest mniejsza lub równa liczbie grup.poniewaz warunek jest spełniony
                // wyswietli na ekranie wartosc równą
                // 1 nastepnie jest inkrementowana zwiekszana o 1 i ponowne sprawdzane są wszystkie warunki.efekcie
                // program wyswietli liczbę kolejnych grub.
                poletekstowe2.append("grupa  " + i + ":" + sekwencja.group(i) + "\n");
                poletekstowe2.append("\n");
                // \n Zawiera tekst odpowiadający -tej grupie przechwytujące
                // sekwencja group Ciąg znaków, który został dopasowany.
            }
        }

        // ------------------------------------------------------------------------------
        przycisk.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {

                String nazwa = pole.getText();
                try {

                    ObjectInputStream ois = new ObjectInputStream(new FileInputStream(nazwa));
                    Planeta planeta = (Planeta) ois.readObject();

                    poletekstowe.append("Planeta:--" + planeta.getNazwa() + ".\n");
                    poletekstowe.append("Średnica:--" + planeta.getSrednica() + "km.\n");
                    poletekstowe.append("Długość lat ziemskich:--" + planeta.getDlugoscRoku() + ".\n");

                    ois.close();
                } catch (Exception ex) {
                    ex.printStackTrace();
                }
            }
        });
    }
}
0

Dzięki jesteś boski.

0

Ale ty w ogóle rozumiesz czemu pojawiał ci się ten warning? Bo w konstruktorze przekazujesz do action listenerów this, a wewnatrz konstrktora siłą rzeczy ten twój "this" nie jest jeszcze do końca stworzony. Akurat w twoim przypadku to nic nie zmienia, ale nie powinieneś tak robić.

0

No i kicha button szukaj działa a button przycisk działa dopiero po działaniu buttona szukaj. Co jest nie tak.

.

 @Override
    public void actionPerformed(ActionEvent e) {
     { 
     if(e.getSource()==szukaj)
       {
        
        // Uchwyt otwarty działania przycisku.
        String wrzozec = wrzozectxt.getText();// // przeszukiwany (dopasowywany) tekst
        // pobierany w dialogach wejściowych, w pętli
        String ciąg_do_przeszukania = poletekstowe.getText();
 
        // Klasa Pattern nie ma konstruktorów a obiekt klasy zwracany
        // jest przez statyczną metodę compile(), której argumentem jest
        // ciąg znaków z wyraŜeniem regularnym; compile powoduje
        // transformację wyraŜenia regularnego do wzorca, np.:
        // Pattern wzorzec/=/Pattern.compile("wyraŜenie_regularne")
        // utworzeniewzorcaregex
        // Pattern.CASE_INSENSITIVE(?i)Porównania liter bez uwzględnienia ich wielkości
        // Pattern.MULTILINE(?m)Pozwala na dopasowanie ^ i $ na początku i na końcu wierszy (separowanych znakiem końca
        // wiersza)
        // Pattern.Multiline Metaznaki  oraz 3 pasują do miejsc położonych tuż obok osadzonych znaków końca wiersz
        // Pattern.Case_Insensitive Podczas dopasowywania nie będzie uwzględnianawielkość liter należących do kodu ASCII
        // Swobodne stosowanie znaków biaych: Pattern.COMMENTS
        // Ignorowanie wielkoci liter: Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE
        // Dopasowywanie znaków podziau wiersza do kropek: Pattern.DOTALL
        // Dopasowywanie znaków podziau wiersza do karet i znaków dolara: Pattern.MULTILINE
 
        Pattern wzorzec = Pattern.compile(wrzozec, Pattern.CASE_INSENSITIVE | Pattern.MULTILINE);// |lub or(gif)|(jpg) -
                                                                                                 // pasuje do gif lub
                                                                                                 // jpg
        // (U|u)(l|lica) (3-go|Trzeciego) Maja – pasuje do ul 3-, Podwzorzec moŜe być zamknięty w niepodzielnej grupie
        // za
        // pomocą nawiasów ( ). W ten sposób moŜna uŜyć gałęzi nie tylko dla całego wzorca, ale równieŜ dla jego
        // fragmentów np
        // rozgałęzianie [|] – oznacza „lub”, „OR” i pozwala na łączenie wielu wyraŜeń w jedno, do którego pasuje
        // //dowolne z wyraŜeń składowych np
 
        // utworzeniesekwencjizawierajacej wszystkiepodciągi
        // pasującedowzorcawyszukanewpodanymciągu
        Matcher sekwencja = wzorzec.matcher(ciąg_do_przeszukania);// Metoda matcher() klasy Pattern zwraca obiekt klasy
                                                                  // Matcher;
        // argumentem metody jest ciąg znaków w którym będzie //poszukiwany wzorzec, np.:Matcher
        // sekwencja=wzorzec.matcher("ciąg_do_przeszukania")
 
        // pobranieposzczególnychpodciągówzsekwencji
        // sposób próbuje dopasować cały ciąg wejściowy do wzorca.
        // Nie posiada konstruktorów a do tworzenia obiektu uŜywa się
        // pozwala na określenie czy w określonym ciągu znakowym, da się wyszukać podciąg zgodny ze wzorcem dopasowania
        while (sekwencja.find())// Prawda, jeśli wzór można znaleźć w temacie ciąg znaków. Pierwszy numer zaczyna się od
                                // próby na początku łańcucha.
        // Kolejne wywołania rozpocznie się po ostatnim znaku wcześniej dopasowane, co sprawia, że ​​dobre dla pętli
        // while.
        // sekwencyjne wyszukiwanie za pomocą metody find
        // Matcher.find() zwraca prawdę, jeśli znaleziono dopasowania.
 
        { // poletekstowe2.append(sekwencja.group());//wynik
          // poletekstowe2.append("\n");
          // Grupy Przechwytywanie są numerowane licząc ich nawiasach otwarcia od lewej do prawej. Aby dowiedzieć się,
          // ile grup występują w wyrażeniu, należy zadzwonić pod groupCount() metoda na matcher obiektu. groupCount()
          // Metoda zwraca int pokazujący liczbę grup przechwytywania obecne w matcher-sekwencja wzorca.
          // =zwykłe przypisanie,wartosc=wyraz
          // Matcher.groupCount (): Metoda ta liczy dopasowany łańcuch lub tekst danej grupy tekstu lub ciąg znaków.
          // Matcher.groupCount() zwraca liczbę grup przechwytywania w strukturze niezależnie od tego czy grupy
          // przechwytywania faktycznie udział w meczu.
            int liczbagrup = sekwencja.groupCount();// liczba grup//int groupCount () Zwraca liczbę grup przechwytywania
                                                    // w tym matcher wzorca.
 
            // poletekstowe2.append("liczba grup w wyrażeniu:"+liczbagrup);
            // poletekstowe2.append("\n");
            // 1)zmiennej iteracyjnej i przypisujemy wartosc 0,poniewaz chcemy aby liczby były wyswietlane od 0.
            // 2)w warunku okreslamy ze petla ma działac dotąd az zmienna iteracyjna bedzie mniejsza lub równa liczbie
            // grup
            // 3)w kazdym przebiegu petli nakazujemy równiez zwiekszenie wartosci zmiennej i o 1
            for (int i = 0; i <= liczbagrup; i++) {// wprowadzamy zawartosc wszystkich grup
                                                   // Grupa zera zawsze oznacza całe wyrażenie.
                                                   // mniejsze lub równe wyraz<=wyraz
 
                // w kazdej petli wywołujemy tez metode append wyswietlająca wartosc zmiennej i.
                // petla sprawdza czy wartoscjest mniejsza lub równa liczbie grup.poniewaz warunek jest spełniony
                // wyswietli na ekranie wartosc równą
                // 1 nastepnie jest inkrementowana zwiekszana o 1 i ponowne sprawdzane są wszystkie warunki.efekcie
                // program wyswietli liczbę kolejnych grub.
                poletekstowe2.append("grupa  " + i + ":" + sekwencja.group(i) + "\n");
                poletekstowe2.append("\n");
                // \n Zawiera tekst odpowiadający -tej grupie przechwytujące
                // sekwencja group Ciąg znaków, który został dopasowany.
            }
        }
 
        // ------------------------------------------------------------------------------
        przycisk.addActionListener(new ActionListener() {
            
            @Override
            public void actionPerformed(ActionEvent e) {
 
                String nazwa = pole.getText();
                try {
 
                    ObjectInputStream ois = new ObjectInputStream(new FileInputStream(nazwa));
                    Planeta planeta = (Planeta) ois.readObject();
 
                    poletekstowe.append("Planeta:--" + planeta.getNazwa() + ".\n");
                    poletekstowe.append("Średnica:--" + planeta.getSrednica() + "km.\n");
                    poletekstowe.append("Długość lat ziemskich:--" + planeta.getDlugoscRoku() + ".\n");
 
                    ois.close();
                } catch (Exception ex) {
                ex.printStackTrace();
                }
            }
        });
    }
}}}
0

OMG. Napisałem to już raz, napiszę po raz drugi:
NIE robimy klas "człowiek orkiestra". Potrzebujesz dwie zupełnie różne akcje dla buttonów? Zrób dwie OSOBNE klasy! Poza tym przecież widzę w kodzie że robisz przycisk.addActionListener(this) więc nie dziwota że wciśnięcie tego guzika wywołuje ci tą samą akcję actionPerformed co dla szukaj

0

Dodałem i wyskoczył błąd w głównej klasie Okno3 i pisze okno3 is not abstract method actionperformed.

public class Okno3 extends JPanel implements ActionListener {
class regex implements ActionListener 
{ 
    @Override
    public void actionPerformed(ActionEvent e) {
     {
     if(e.getSource()==szukaj)// Jedna z metod klasy EventObject
     //Object getSource()- zwraca obiekt, 
     //który wywołał zdarzenie
     //– Wywoływanie metody – dla obiektu zdarzenia
     //– Porównywanie obiektu z dostępnymi komponentami 
     //– przy pomocy operatora '==
       {
        
        // Uchwyt otwarty działania przycisku.
        String wrzozec = wrzozectxt.getText();// // przeszukiwany (dopasowywany) tekst
        // pobierany w dialogach wejściowych, w pętli
        String ciąg_do_przeszukania = poletekstowe.getText();
 
        // Klasa Pattern nie ma konstruktorów a obiekt klasy zwracany
        // jest przez statyczną metodę compile(), której argumentem jest
        // ciąg znaków z wyraŜeniem regularnym; compile powoduje
        // transformację wyraŜenia regularnego do wzorca, np.:
        // Pattern wzorzec/=/Pattern.compile("wyraŜenie_regularne")
        // utworzeniewzorcaregex
        // Pattern.CASE_INSENSITIVE(?i)Porównania liter bez uwzględnienia ich wielkości
        // Pattern.MULTILINE(?m)Pozwala na dopasowanie ^ i $ na początku i na końcu wierszy (separowanych znakiem końca
        // wiersza)
        // Pattern.Multiline Metaznaki  oraz 3 pasują do miejsc położonych tuż obok osadzonych znaków końca wiersz
        // Pattern.Case_Insensitive Podczas dopasowywania nie będzie uwzględnianawielkość liter należących do kodu ASCII
        // Swobodne stosowanie znaków biaych: Pattern.COMMENTS
        // Ignorowanie wielkoci liter: Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE
        // Dopasowywanie znaków podziau wiersza do kropek: Pattern.DOTALL
        // Dopasowywanie znaków podziau wiersza do karet i znaków dolara: Pattern.MULTILINE
 
        Pattern wzorzec = Pattern.compile(wrzozec, Pattern.CASE_INSENSITIVE | Pattern.MULTILINE);// |lub or(gif)|(jpg) -
                                                                                                 // pasuje do gif lub
                                                                                                 // jpg
        // (U|u)(l|lica) (3-go|Trzeciego) Maja – pasuje do ul 3-, Podwzorzec moŜe być zamknięty w niepodzielnej grupie
        // za
        // pomocą nawiasów ( ). W ten sposób moŜna uŜyć gałęzi nie tylko dla całego wzorca, ale równieŜ dla jego
        // fragmentów np
        // rozgałęzianie [|] – oznacza „lub”, „OR” i pozwala na łączenie wielu wyraŜeń w jedno, do którego pasuje
        // //dowolne z wyraŜeń składowych np
 
        // utworzeniesekwencjizawierajacej wszystkiepodciągi
        // pasującedowzorcawyszukanewpodanymciągu
        Matcher sekwencja = wzorzec.matcher(ciąg_do_przeszukania);// Metoda matcher() klasy Pattern zwraca obiekt klasy
                                                                  // Matcher;
        // argumentem metody jest ciąg znaków w którym będzie //poszukiwany wzorzec, np.:Matcher
        // sekwencja=wzorzec.matcher("ciąg_do_przeszukania")
 
        // pobranieposzczególnychpodciągówzsekwencji
        // sposób próbuje dopasować cały ciąg wejściowy do wzorca.
        // Nie posiada konstruktorów a do tworzenia obiektu uŜywa się
        // pozwala na określenie czy w określonym ciągu znakowym, da się wyszukać podciąg zgodny ze wzorcem dopasowania
        while (sekwencja.find())// Prawda, jeśli wzór można znaleźć w temacie ciąg znaków. Pierwszy numer zaczyna się od
                                // próby na początku łańcucha.
        // Kolejne wywołania rozpocznie się po ostatnim znaku wcześniej dopasowane, co sprawia, że ​​dobre dla pętli
        // while.
        // sekwencyjne wyszukiwanie za pomocą metody find
        // Matcher.find() zwraca prawdę, jeśli znaleziono dopasowania.
 
        { // poletekstowe2.append(sekwencja.group());//wynik
          // poletekstowe2.append("\n");
          // Grupy Przechwytywanie są numerowane licząc ich nawiasach otwarcia od lewej do prawej. Aby dowiedzieć się,
          // ile grup występują w wyrażeniu, należy zadzwonić pod groupCount() metoda na matcher obiektu. groupCount()
          // Metoda zwraca int pokazujący liczbę grup przechwytywania obecne w matcher-sekwencja wzorca.
          // =zwykłe przypisanie,wartosc=wyraz
          // Matcher.groupCount (): Metoda ta liczy dopasowany łańcuch lub tekst danej grupy tekstu lub ciąg znaków.
          // Matcher.groupCount() zwraca liczbę grup przechwytywania w strukturze niezależnie od tego czy grupy
          // przechwytywania faktycznie udział w meczu.
            int liczbagrup = sekwencja.groupCount();// liczba grup//int groupCount () Zwraca liczbę grup przechwytywania
                                                    // w tym matcher wzorca.
 
            // poletekstowe2.append("liczba grup w wyrażeniu:"+liczbagrup);
            // poletekstowe2.append("\n");
            // 1)zmiennej iteracyjnej i przypisujemy wartosc 0,poniewaz chcemy aby liczby były wyswietlane od 0.
            // 2)w warunku okreslamy ze petla ma działac dotąd az zmienna iteracyjna bedzie mniejsza lub równa liczbie
            // grup
            // 3)w kazdym przebiegu petli nakazujemy równiez zwiekszenie wartosci zmiennej i o 1
            for (int i = 0; i <= liczbagrup; i++) {// wprowadzamy zawartosc wszystkich grup
                                                   // Grupa zera zawsze oznacza całe wyrażenie.
                                                   // mniejsze lub równe wyraz<=wyraz
 
                // w kazdej petli wywołujemy tez metode append wyswietlająca wartosc zmiennej i.
                // petla sprawdza czy wartoscjest mniejsza lub równa liczbie grup.poniewaz warunek jest spełniony
                // wyswietli na ekranie wartosc równą
                // 1 nastepnie jest inkrementowana zwiekszana o 1 i ponowne sprawdzane są wszystkie warunki.efekcie
                // program wyswietli liczbę kolejnych grub.
                poletekstowe2.append("grupa  " + i + ":" + sekwencja.group(i) + "\n");
                poletekstowe2.append("\n");
                // \n Zawiera tekst odpowiadający -tej grupie przechwytujące
                // sekwencja group Ciąg znaków, który został dopasowany.
            }
        }
 
        // ------------------------------------------------------------------------------
      
      class przycisk implements ActionListener 
        { 
            public void actionPerformed(ActionEvent e) {
             
                String nazwa = pole.getText();
                try {
 
                    ObjectInputStream ois = new ObjectInputStream(new FileInputStream(nazwa));
                    Planeta planeta = (Planeta) ois.readObject();
 
                    poletekstowe.append("Planeta:--" + planeta.getNazwa() + ".\n");
                    poletekstowe.append("Średnica:--" + planeta.getSrednica() + "km.\n");
                    poletekstowe.append("Długość lat ziemskich:--" + planeta.getDlugoscRoku() + ".\n");
 
                    ois.close();
                } catch (Exception ex) {
                ex.printStackTrace();
                }
            }
        
    }
     }}}}}
0

Jeszcze dodam to.

Exception in thread "AWT-EventQueue-0" java.lang.UnsupportedOperationException: Not supported yet.
at projekt.Okno3.actionPerformed(Okno3.java:181)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
at java.awt.Component.processMouseEvent(Component.java:6504)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3321)
at java.awt.Component.processEvent(Component.java:6269)
at java.awt.Container.processEvent(Container.java:2229)
at java.awt.Component.dispatchEventImpl(Component.java:4860)
at java.awt.Container.dispatchEventImpl(Container.java:2287)
at java.awt.Component.dispatchEvent(Component.java:4686)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
at java.awt.Container.dispatchEventImpl(Container.java:2273)
at java.awt.Window.dispatchEventImpl(Window.java:2713)
at java.awt.Component.dispatchEvent(Component.java:4686)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:707)
at java.awt.EventQueue.access$000(EventQueue.java:101)
at java.awt.EventQueue$3.run(EventQueue.java:666)
at java.awt.EventQueue$3.run(EventQueue.java:664)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
at java.awt.EventQueue$4.run(EventQueue.java:680)
at java.awt.EventQueue$4.run(EventQueue.java:678)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:677)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:211)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
BUILD SUCCESSFUL (total time: 20 seconds)

0

Ty w ogóle umiesz chociaż minimalnie programować w javie? (pytanie retoryczne - widzę że nie). Usuń implements ActionListener z klasy Okno3.

0

Mylisz sie już to robiłem.Wywalał mi błąd w this przy usunięciu z klasy musi tam być.Najlepiej utworzę nowy panel i będzie po kłopocie.

szukaj.addActionListene**r(this)**;
0

Czy ty jesteś normalny? Ty w ogóle wiesz co robisz? Zdajesz sobie sprawę z tego ze NAJPIERW trzeba poznać podstawy a potem można pisać programy?
Oczywiście że wyskoczy ci taki błąd, ale zamiast

szukaj.addActionListener(this);

Powinieneś tam mieć teraz:

szukaj.addActionListener(new ActionListenerDlaGuzikaSzukaj());

Gdzie klasa ActionListenerDlaGuzikaSzukaj to:

class ActionListenerDlaGuzikaSzukaj implements ActionListener{
}

i w actionPerformed ma tą twoja akcje która powinna sie wykonać po kliknięciu w guzik...

0

Działa ,ale zrobiłem na oddzielnym panelu też wyszło. Dziękuję za pomoc nie trzeba się zaraz denerwować.

1 użytkowników online, w tym zalogowanych: 0, gości: 1