Program nie działa na Linux

Program nie działa na Linux
A9
  • Rejestracja:ponad 8 lat
  • Ostatnio:prawie 5 lat
  • Postów:26
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:

Kopiuj
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 + "]";
	}
	
	
}

Kopiuj
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

edytowany 3x, ostatnio: Arek9922
Wibowit
  • Rejestracja:około 20 lat
  • Ostatnio:około 14 godzin
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.


"Programs must be written for people to read, and only incidentally for machines to execute." - Abelson & Sussman, SICP, preface to the first edition
"Ci, co najbardziej pragną planować życie społeczne, gdyby im na to pozwolić, staliby się w najwyższym stopniu niebezpieczni i nietolerancyjni wobec planów życiowych innych ludzi. Często, tchnącego dobrocią i oddanego jakiejś sprawie idealistę, dzieli od fanatyka tylko mały krok."
Demokracja jest fajna, dopóki wygrywa twoja ulubiona partia.
edytowany 2x, ostatnio: Wibowit
A9
  • Rejestracja:ponad 8 lat
  • Ostatnio:prawie 5 lat
  • Postów:26
0

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

vpiotr
  • Rejestracja:ponad 13 lat
  • Ostatnio:prawie 3 lata
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).

A9
  • Rejestracja:ponad 8 lat
  • Ostatnio:prawie 5 lat
  • Postów:26
0

Dodanie strumien.flush(); nic nie daje.

edytowany 1x, ostatnio: Arek9922
jarekczek
Nowa linia też nic nie daje?
A9
  • Rejestracja:ponad 8 lat
  • Ostatnio:prawie 5 lat
  • Postów:26
0

Też nic nie daje.

Wibowit
  • Rejestracja:około 20 lat
  • Ostatnio:około 14 godzin
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.


"Programs must be written for people to read, and only incidentally for machines to execute." - Abelson & Sussman, SICP, preface to the first edition
"Ci, co najbardziej pragną planować życie społeczne, gdyby im na to pozwolić, staliby się w najwyższym stopniu niebezpieczni i nietolerancyjni wobec planów życiowych innych ludzi. Często, tchnącego dobrocią i oddanego jakiejś sprawie idealistę, dzieli od fanatyka tylko mały krok."
Demokracja jest fajna, dopóki wygrywa twoja ulubiona partia.
A9
  • Rejestracja:ponad 8 lat
  • Ostatnio:prawie 5 lat
  • Postów:26
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

jarekczek
  • Rejestracja:prawie 8 lat
  • Ostatnio:ponad 4 lata
  • Lokalizacja:Siemianowice Śląskie
  • Postów:500
0

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


Przeważnie ignoruję niezarejestrowanych użytkowników.
A9
  • Rejestracja:ponad 8 lat
  • Ostatnio:prawie 5 lat
  • Postów:26
0
jarekczek napisał(a):

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

Czy chodziło Ci o takie coś?

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

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

jarekczek
Nową linię raczej bym tym strumieniem dalej robił. strumien.writeUTF(System.getProperty("line.separator")). Dobra, nie musisz pisać. Zakładam, że dalej nie działa :)
0

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

A9
  • Rejestracja:ponad 8 lat
  • Ostatnio:prawie 5 lat
  • Postów:26
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.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.