Pessoal, estou querendo pegar todos os system.out que ocorrem dentro de classes que não tenho acesso e usar.
Um exemplo para ficar melhor o que eu quero.
import javax.swing.JOptionPane;
public class Class1 {
public static void main(String[] args) {
metodo1();
metodo2();
// Usar os system para imprimir por exemplo em um MessageDialog
// Atribuir o valor de string que estão no metodo1 e metodo2 ao sytemOut (Sem usar return)
String systemOut = "";
JOptionPane.showMessageDialog(null, systemOut);
}
private static void metodo2() {
String string = "METODO2!!!!";
System.out.println(string);
}
private static void metodo1(){
String string = "METODO1!!!!";
System.out.println(string);
}
}
Soluções do tipo o metodo1 e metodo2 retornar uma String não são válidos.
A pergunta é tem como eu pegar os System.out.println que estão nos metodo1 e metodo2?
revton, não entendi o que exatamente você está querendo fazer…
Você que dinamicamente dizer aos métodos 1 e 2 o que ele vão imprimir no System.out.println() ?
Se é isso, que tal passar os valores como parametro para os métodos?
[quote=flaviochess]revton, não entendi o que exatamente você está querendo fazer…
Você que dinamicamente dizer aos métodos 1 e 2 o que ele vão imprimir no System.out.println() ?
Se é isso, que tal passar os valores como parametro para os métodos?[/quote]
Ele quer retornar uma String dos metódos sem dar return pois ele não tem acesso aos códigos dos métodos.
Resumindo pelo que entendi é isso.
[quote=Frantic Avenger][quote=flaviochess]revton, não entendi o que exatamente você está querendo fazer…
Você que dinamicamente dizer aos métodos 1 e 2 o que ele vão imprimir no System.out.println() ?
Se é isso, que tal passar os valores como parametro para os métodos?[/quote]
Ele quer retornar uma String dos metódos sem dar return pois ele não tem acesso aos códigos dos métodos.
Resumindo pelo que entendi é isso.[/quote]
Exatamente isso Frantic Avenger, alguém tem uma ideia de como fazer isso?
O System.out é um PrintStream. Podes fazer System.setOut com outro PrintStream e o System.out passa a escrever para esse PrintStream.
No caso específico:
private void doWork() {
//stores original out
PrintStream originalOut = System.out;
//Creates my out and sets it as standard out
StringOutputStream myStringOut = new StringOutputStream();
PrintStream newOut = new PrintStream(myStringOut);
System.setOut(newOut);
//invoke methods with println
randomMethod();
anotherRandomMethod();
//restore System out
System.setOut(originalOut);
//now print saved string
System.out.println("ONLY PRINT IN THE END: " + myStringOut.getString());
}
private void randomMethod() {
System.out.println("Random String");
}
private void anotherRandomMethod() {
System.out.println("bla bla bla");
System.out.println("other line with bla bla bla");
}
E a class StringOutputStream:
class StringOutputStream extends OutputStream {
StringBuilder str = new StringBuilder();
public void write(int b) throws IOException {
str.append((char) b);
}
public String getString() {
return str.toString();
}
}
[quote=pmlm]O System.out é um PrintStream. Podes fazer System.setOut com outro PrintStream e o System.out passa a escrever para esse PrintStream.
No caso específico:
private void doWork() {
//stores original out
PrintStream originalOut = System.out;
//Creates my out and sets it as standard out
StringOutputStream myStringOut = new StringOutputStream();
PrintStream newOut = new PrintStream(myStringOut);
System.setOut(newOut);
//invoke methods with println
randomMethod();
anotherRandomMethod();
//restore System out
System.setOut(originalOut);
//now print saved string
System.out.println("ONLY PRINT IN THE END: " + myStringOut.getString());
}
private void randomMethod() {
System.out.println("Random String");
}
private void anotherRandomMethod() {
System.out.println("bla bla bla");
System.out.println("other line with bla bla bla");
}
E a class StringOutputStream:
[code]
class StringOutputStream extends OutputStream {
StringBuilder str = new StringBuilder();
public void write(int b) throws IOException {
str.append((char) b);
}
public String getString() {
return str.toString();
}
}
import java.io.PrintStream;
public class Class1 {
public static void main(String[] args) {
PrintStream originalOut = System.out;
//Creates my out and sets it as standard out
StringOutputStream myStringOut = new StringOutputStream();
PrintStream newOut = new PrintStream(myStringOut);
System.setOut(newOut);
metodo1();
metodo2();
//restore System out
System.setOut(originalOut);
}
private static void metodo2() {
System.out.println("METODO2!!!!");
}
private static void metodo1() {
System.out.println("METODO1!!!!");
}
}
import java.io.IOException;
import java.io.OutputStream;
class StringOutputStream extends OutputStream {
StringBuilder str = new StringBuilder();
int cont = 0;
public void write(int b) throws IOException {
str.append((char) b);
showConsole(String.valueOf(str.charAt(cont)));
cont++;
}
}