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