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.

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