Alihkan konten konsol Java ke UI Java

Saya memiliki file prolog (Sistem Pakar) yang saya konsultasikan dari Java menggunakan perpustakaan Jpl (org.jpl7.*) dan saya memiliki UI tempat saya ingin menampilkan output kueri prolog. Ini adalah Aliran Keluaran Khusus saya yang seharusnya mengalihkan setiap konten konsol ke antarmuka saya (jTextAreaOUTPUT adalah tempat saya mengarahkan ulang konten)

public class CustomOutputStream extends OutputStream {
 private JTextArea jTextAreaOUTPUT;

 public CustomOutputStream(JTextArea textArea) {
    jTextAreaOUTPUT = textArea;
 }

 @Override
 public void write(int b) throws IOException {
    // redirects data to the text area
    jTextAreaOUTPUT.append(String.valueOf((char)b));
  // scrolls the text area to the end of data
    jTextAreaOUTPUT.setCaretPosition(jTextAreaOUTPUT.getDocument().getLength());
 }
}

Ini adalah beberapa baris yang saya miliki di Kelas Antarmuka saya: ini memanggil metode Aliran Output Kustom:

PrintStream printStream = new PrintStream(new CustomOutputStream(jTextAreaOUTPUT), true, "UTF-8");
 // keeps reference of standard output stream
 PrintStream standardOut = System.out;
 System.setOut(printStream);
 System.setErr(printStream);

Untuk beberapa alasan aneh, file prolog ini tidak berfungsi (saya mencoba dengan yang lain dan berhasil): UI macet dan konten terus ditampilkan di konsol Java (gerhana). File Sistem Pakar bekerja dengan instruksi write di Prolog (mis. write('Lorem Ipsum') )

  1. Mengapa standardOut tidak pernah digunakan? Bolehkah dinyatakan seperti ini?
  2. Apakah ada cara untuk memaksa pengalihan untuk semua teks yang harus ditulis di konsol Eclipse?

Saya juga mencoba menggunakan metode "write Stream" di prolog, tetapi (hanya untuk file prolog ini, mungkin karena rekursi) UI macet meskipun output ditulis pada file txt.


person 5minutsOfBullfight    schedule 05.10.2015    source sumber
comment
Anda mungkin perlu mengganti fungsi tulis lainnya di outputstream write(byte[] b), write(byte[] b, int off, int len) jika penulis tidak menulis satu karakter dalam satu waktu.   -  person WillShackleford    schedule 05.10.2015
comment
Bisakah Anda melakukannya atau Anda tahu caranya? Terima kasih   -  person 5minutsOfBullfight    schedule 05.10.2015


Jawaban (1)


Anda mungkin perlu mengganti fungsi tulis lainnya di outputstream write(byte[] b), write(byte[] b, int off, int len) jika penulis tidak menulis satu karakter dalam satu waktu

Untuk mengganti fungsi tulis OutputStream lainnya, cukup berikan kode serupa ke fungsi karakter tunggal yang sudah Anda tulis:

public class CustomOutputStream extends OutputStream {

    private JTextArea jTextAreaOUTPUT;

    public CustomOutputStream(JTextArea textArea) {
        jTextAreaOUTPUT = textArea;
    }

    @Override
    public void write(int b) throws IOException {
        // redirects data to the text area
        jTextAreaOUTPUT.append(String.valueOf((char) b));
        // scrolls the text area to the end of data
        jTextAreaOUTPUT.setCaretPosition(jTextAreaOUTPUT.getDocument().getLength());
    }

    @Override
    public void write(byte[] b, int off, int len) throws IOException {
        // redirects data to the text area
        jTextAreaOUTPUT.append(new String(b, off, len));
        // scrolls the text area to the end of data
        jTextAreaOUTPUT.setCaretPosition(jTextAreaOUTPUT.getDocument().getLength());
    }

    @Override
    public void write(byte[] b) throws IOException {
        write(b,0,b.length);
    }

}
person WillShackleford    schedule 05.10.2015