Program nie działa na Linux

0

Cześć!

Mam kolejny problem z realizacją pewnego kursu. W trakcie przerabiania strumieni napotkałem na problem braku wyświetlania czegokolwiek na konsoli eclipse. Najlepsze w tym wszystkim jest to, że program na windows też w środowisku eclipse działa bez problemu i zostają wyświetlone pewne dane (nie czytelne ale tak ma być według kursu). Poniżej zamieszczam kod:

import java.text.Collator;
import java.util.Date;

public class Osoba implements Comparable<Osoba>	
{

	private String imie;
	private String nazwisko;
	private Date dataUrodzenia =null;
	private String pesesl = "";
	
	public Osoba(String imie, String nazwisko, String pesesl)
	{
		this.imie = imie;
		this.nazwisko = nazwisko;
		this.pesesl = pesesl;
	}

	public String getImie()
	{
		return imie;
	}

	public void setImie(String imie)
	{
		this.imie = imie;
	}

	public String getNazwisko()
	{
		return nazwisko;
	}

	public void setNazwisko(String nazwisko)
	{
		this.nazwisko = nazwisko;
	}

	public Date getDataUrodzenia()
	{
		return dataUrodzenia;
	}

	public void setDataUrodzenia(Date dataUrodzenia)
	{
		this.dataUrodzenia = dataUrodzenia;
	}

	public String getPesesl()
	{
		return pesesl;
	}

	public void setPesesl(String pesesl)
	{
		this.pesesl = pesesl;
	}

	@Override
	public int compareTo(Osoba o)
	{
		
		return Collator.getInstance().compare(this.nazwisko, o.nazwisko);	
	}


	@Override
	public String toString()
	{
		return "Osoba [imie=" + imie + ", nazwisko=" + nazwisko + ", pesesl=" + pesesl + "]";
	}
	
	
}

import java.io.DataOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class TestFiltrowStrumieni
{

	public static void main (String[] args) throws IOException
	{
		
		List<Osoba> osoby = new ArrayList<Osoba>();
		
		osoby.add(new Osoba("Jan", "Kowalski", "11"));
		osoby.add(new Osoba("Tomek", "Młotek", "90"));
		osoby.add(new Osoba("Zbigniew", "Drut", "69"));
		
		DataOutputStream strumien = new DataOutputStream(System.out);
		
		
		for (Osoba osoba : osoby)
		{
			strumien.writeUTF(osoba.getImie());
			strumien.writeUTF(osoba.getNazwisko());
			strumien.writeUTF(osoba.getPesesl());
		}
		
		strumien.close();
		
	}
	
}

Czy ktoś może mi wyjaśnić dlaczego tak się dzieje i jak to zrobić żeby wyświetlało odpowiednie dane w konsoli?
Wersja eclipse: Oxygen.3a
Linux: Linux Mint 18 (Sarah)
java version 1.8.0_171

0

Pewnie chodzi o to, że coś tam gdzieś tam się zbuforowało i dlatego nie widać. Ja odpaliłem ten program u siebie na Linuksie i widzę te pewne dane, które miały być wyświetlone. Spróbuj odpalić program w inny sposób, np zamiast w IDE odpal w konsoli albo na odwrót.

Najskuteczniejszym sposobem na wypchanie danych z bufora na ekran jest wypisanie znaku nowej linii.

0

No właśnie też zauważyłem, że w konsoli linuxa działa.

0

W tej postaci co masz to teoretycznie powinno być dobrze, ale...
na wszelki wypadek przed strumien.close(); dodaj strumien.flush();

https://coderanch.com/t/522900/java/flush-Java

Być może miałeś w kodzie czekanie na podanie czegoś z klawiatury - wyświetlenie następuje dopiero na flush (który wykonuje się sam na close).

0

Dodanie strumien.flush(); nic nie daje.

0

Też nic nie daje.

0

Przed strumien.close(); daj System.out.println();. Powinno pomóc - jeśli nie to prawdopodobnie coś zwalone z konsolą :]
System.out.println(); po strumien.close(); prawdopodobnie nic nie da, bo w momencie wywołania strumien.close(); zamykany jest także strumień pod spodem, czyli tutaj System.out i dalsze interakcje na System.out nie przyniosą żadnego skutku.

0
Wibowit napisał(a):

Przed strumien.close(); daj System.out.println();. Powinno pomóc - jeśli nie to prawdopodobnie coś zwalone z konsolą :]
System.out.println(); po strumien.close(); prawdopodobnie nic nie da, bo w momencie wywołania strumien.close(); zamykany jest także strumień pod spodem, czyli tutaj System.out i dalsze interakcje na System.out nie przyniosą żadnego skutku.

Nic to nie dało

0

No to może nowa linia, stream-close, a potem Thread.sleep(5000).

0
jarekczek napisał(a):

No to może nowa linia, stream-close, a potem Thread.sleep(5000).

Czy chodziło Ci o takie coś?

System.out.println("\n");
		strumien.close();
		Thread.sleep(5000);

Bo jeżeli tak to też nie działa.

0

Sprawdź na Netbeans lub Intellij, podejrzewam, że winne jest Eclipse.

0

Nie wiem czy kolega przeczytał wszystkie odpowiedzi w tym wątku ale ogólnie to na pewno wina eclipse. W konsoli Linux'a działa poprawnie.

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