TlačiťTlačiť Slovenčina English Hľadať RSS

© 2005 – 2024 Roman Horváth, všetky práva vyhradené. Dnes je 25. 4. 2024.

Stránka sa načítava, prosím čakajte…

Dátum: 1. 2. 2013, pred viacerými rokmi, aktualizované: 31. 7. 2020, pred štyrmi rokmi

Tento príklad ukazuje najjednoduchšie spôsoby uloženia a čítania polohy robota do/zo súboru. Na prácu so súborom je použitá trieda Súbor otvárané v novom okne
(obvykle ide o externý odkaz) programovacieho rámca GRobot, otvárané v novom okne
(obvykle ide o externý odkaz) ktorá zakrýva komplikovanejší mechanizmus Javy.

Na zmenu polohy (aby malo jej ukladanie zmysel) slúži metóda klik v obsluhe udalostí (čiže polohu robota je možné meniť myšou). Poloha je prečítaná pri štarte aplikácie – na začiatku konštruktora a zapísaná pri ukončení aplikácie – v metóde ukončenie v obsluhe udalostí (oboje je označené značkou /*#*/).

 

Prvá ukážka ukladá (a číta) polohu do textového súboru vo forme dvojice čísiel.

Poznámka: Ak súbor poloha.txt nevytvoríte vopred, tak pri prvom spustení programu uvidíte červený text oznamujúci chybu. Ak nechcete, nemusíte tomu venovať žiadnu zvýšenú pozornosť.

~

import knižnica.*;

public class HlavnáTrieda extends GRobot
{
	private HlavnáTrieda()
	{
		čítajPolohu(); /*#*/
		zobraz();

		new ObsluhaUdalostí()
		{
			@Override public void klik()
			{
				skočNaMyš();
			}

			@Override public void ukončenie()
			{
				zapíšPolohu(); /*#*/
			}
		};
	}


	public void zapíšPolohu()
	{
		try
		{
			súbor.otvorNaZápis("poloha.txt");
			súbor.zapíš(polohaX());
			súbor.zapíš(polohaY());
		}
		catch (Exception e)
		{
			Farba záloha = Svet.farbaTextu();
			Svet.farbaTextu(červená);
			Svet.vypíšRiadok(e.getMessage());
			Svet.farbaTextu(záloha);
		}

		try { súbor.zavri(); }
		catch (Exception e) { }
	}

	public void čítajPolohu()
	{
		try
		{
			súbor.otvorNaČítanie("poloha.txt");
			Double x = súbor.čítajReálneČíslo();
			Double y = súbor.čítajReálneČíslo();
			skočNa(x, y);
		}
		catch (Exception e)
		{
			Farba záloha = Svet.farbaTextu();
			Svet.farbaTextu(červená);
			Svet.vypíšRiadok(e.getMessage());
			Svet.farbaTextu(záloha);
		}

		try { súbor.zavri(); }
		catch (Exception e) { }
	}


	public static void main(String[] args)
	{
		Svet.použiKonfiguráciu();
		new HlavnáTrieda();
	}
}

 

Druhá ukážka používa na uloženie (a čítanie) polohy mechanizmus vlastností. Kód sa jemne zjednoduší. Všetky zmeny oproti prvej ukážke sú označené komentármi.

Poznámka: Pre súbor poloha.cfg v kontexte jeho vytvorenia platí to isté, čo pre súbor poloha.txt v prvej ukážke.

~

import knižnica.*;

public class HlavnáTrieda extends GRobot
{
	private HlavnáTrieda()
	{
		čítajPolohu(); /*#*/
		zobraz();

		new ObsluhaUdalostí()
		{
			@Override public void klik()
			{
				skočNaMyš();
			}

			@Override public void ukončenie()
			{
				zapíšPolohu(); /*#*/
			}
		};
	}


	public void zapíšPolohu()
	{
		try
		{
			súbor.otvorNaZápis("poloha.cfg"); // (zmena: upravený názov súboru)
			súbor.zapíšVlastnosť("poloha", poloha()); // (zmena: uloženie polohy ako vlastnosti)
		}
		catch (Exception e)
		{
			Farba záloha = Svet.farbaTextu();
			Svet.farbaTextu(červená);
			Svet.vypíšRiadok(e.getMessage());
			Svet.farbaTextu(záloha);
		}

		try { súbor.zavri(); }
		catch (Exception e) { }
	}

	public void čítajPolohu()
	{
		try
		{
			súbor.otvorNaČítanie("poloha.cfg"); // (zmena: upravený názov súboru)
			Bod b = súbor.čítajVlastnosť("poloha", (Poloha)poloha()); // (zmena: prečítanie polohy ako vlastnosti)
			skočNa(b); // (zmena: skok na objekt prečítanej polohy)
		}
		catch (Exception e)
		{
			Farba záloha = Svet.farbaTextu();
			Svet.farbaTextu(červená);
			Svet.vypíšRiadok(e.getMessage());
			Svet.farbaTextu(záloha);
		}

		try { súbor.zavri(); }
		catch (Exception e) { }
	}


	public static void main(String[] args)
	{
		Svet.použiKonfiguráciu();
		new HlavnáTrieda();
	}
}

 

obrázok 
Prvé spustenie (prvého variantu).

obrázok 
Ďalšie spustenie s prečítanou zmenenou polohou.

 

Okrem týchto spôsobov sa dá využiť mechanizmus registrácie a ukladania konfigurácie robota – pozri napríklad tu: Svet.registrujRobot. otvárané v novom okne
(obvykle ide o externý odkaz) Súbor automatickej konfigurácie však môže byť zbytočne veľký, pretože automatická konfigurácia ukladá všetky vlastnosti robotov bez ohľadu na to, či sú používané, alebo nie.