Java. Przekazywanie wyników do "Logu"


(Duzy Rysiek) #1

Witam serdecznie. Piszę projekt na studia i mam pewien problem, mianowicie mam metodę ping (znaleziona w internecie) i chce żeby wynik działanie pingu był zapisywany w logu okienkowym programu który napisałem a nie w kompilatorze. Widziałem kilka przykładów w internecie ale to było np obliczanie temperatury z Celsjusza na Farniente i tym podobne programy. Wiem że wszytko ma się mieścić w warunku if(zrodlo==btPing) :stuck_out_tongue_winking_eye: :smiley: dopiero zapoznaję się z javą wiec proszę o wyrozumiałość. Używam kompilatora Eclipse. Poniżej podaje kod programu :

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JOptionPane;

import javax.swing.JPanel;

import javax.swing.JTextField;


public class Okienko extends JFrame implements ActionListener

{

	static JPanel panel;

	static JButton btPing, btWyjscie, btAutorzy;

	static JLabel etyPing, etyLog;

	static JTextField txAdresIp, txLog;

	static String adresIP;

	public Okienko()

	{

		//okienko 

		panel = new JPanel(); setSize(500,400); setTitle("okienko"); setContentPane(panel); setLayout(null);

		//Sprawdzanie połączenia

		etyPing = new JLabel("Sprawdź połączenie:"); etyPing.setBounds(10,10,130,20); panel.add(etyPing);

		txAdresIp = new JTextField("Wpisz adres IP serwera"); txAdresIp.setBounds(135,10,200,20); panel.add(txAdresIp);

		btPing = new JButton("Sprawdź"); btPing.setBounds(350,10,100,20); btPing.addActionListener(this); panel.add(btPing);

		//przycisk wyjście

		btWyjscie = new JButton("Wyjście"); btWyjscie.setBounds(390,350,100,20); btWyjscie.addActionListener(this); panel.add(btWyjscie);

		//przycisk Autorzy

		btAutorzy = new JButton("Autorzy"); btAutorzy.setBounds(290,350,100,20); btAutorzy.addActionListener(this); panel.add(btAutorzy);

		//pole tekstowe z logami

		etyLog = new JLabel("Logi programu: "); etyLog.setBounds(10,60,100,20);panel.add(etyLog); 

		txLog = new JTextField(""); txLog.setBounds(10,80,470,250); panel.add(txLog);

	}

	public static void Ping() //sprawdzanie połączenia przez ping'a

	{

		String ip = adresIP;

		String pingResult = "";

		String pingCmd = "ping " + ip;


		try 

		{

			Runtime r = Runtime.getRuntime();

			Process p = r.exec(pingCmd);

			BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream()));

			String inputLine;

			while ((inputLine = in.readLine()) != null) 

			{

				System.out.println(inputLine);

				pingResult += inputLine;

			}

		in.close();

		}

		catch (IOException e) 

		{

			System.out.println(e);

		}

	}

	public static void Informacje()

	{

		JOptionPane.showMessageDialog(null, "Grzegorz III SSI \n Krosno 2012 \n Projekt na zalicznie przedmoitu");

	}


	public static void main(String[] args) 

	{

		Okienko okno = new Okienko();

		okno.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

		okno.setVisible(true);


	}

	public void actionPerformed(ActionEvent e) 

	{	

		Object zrodlo = e.getSource();

		if(zrodlo==btPing)

		{

			adresIP = txAdresIp.getText();

			Ping();

		}

		else if (zrodlo==btAutorzy)

		{

			Informacje();

		}

		else if (JOptionPane.showConfirmDialog (btWyjscie, "Zakończyć apikację?", 

				"Zakończenie", JOptionPane.YES_NO_OPTION, 

				JOptionPane.QUESTION_MESSAGE)==0)System.exit(0);

	}

}

(Woka90) #2

Cześć,

Przygląnij się temu co poniżej powinno spełnić Twoje wymagania:

import java.io.IOException;  

import java.util.logging.FileHandler;  

import java.util.logging.Level;  

import java.util.logging.Logger;  

import java.util.logging.SimpleFormatter;  


public class MyLogger {  


    public static void main(String[] args) {  


        Logger logger = Logger.getLogger("MyLog");  

        FileHandler fh;  


        try {  


            // This block configure the logger with handler and formatter  

            fh = new FileHandler("C:/temp/test/MyLogFile.log");  

            logger.addHandler(fh);  

            //logger.setLevel(Level.ALL);  

            SimpleFormatter formatter = new SimpleFormatter();  

            fh.setFormatter(formatter);  


            // the following statement is used to log any messages  

            logger.info("My first log");  


        } catch (SecurityException e) {  

            e.printStackTrace();  

        } catch (IOException e) {  

            e.printStackTrace();  

        }  


        logger.info("Hi How r u?");  


    }  


}

(Duzy Rysiek) #3

dzięki za pomoc bo każda się przyda ale nie chce żeby mi zapisywało do pliku tylko wyniki uruchomionej metody PING wpisywał w TextLabel txLog. Czyli jeśli uruchomię mu pinga to ma mi komunikat wypisać w okienku tekstowym programu.


(Woka90) #4

while ((inputLine = in.readLine()) != null)

{

System.out.println(inputLine);

pingResult += inputLine;

}

ja bym to zrobił tak

while ((inputLine = in.readLine()) != null)

{

txlog = new JTextField(inputLine);

pingResult += inputLine;

}

jest to mało optymalne ale najszybsze


(Duzy Rysiek) #5

zmieniłem linijkę: System.out.println(inputLine); na txLog = new JTextField(inputLine); i w efekcie nie wypisuje mi ani w kompilatorze ani w okienku txLog :? a takie jeszcze jedno pytanie, jak i gdzie skonstruować warunek aby wypisywał komunikat "połączenie jest/nie jest dostępne z serwerem" zamiast odpowiedzi ping-owskich?


(B.Andy) #6

Po pierwsze Eclipse to IDE a nie kompilator!

Po drugie, nie znam się na swingu (preferuję SWT, bo natywny), ale sprawdź to co tu piszą - http://stackoverflow.com/questions/2564 ... -threading