I have a problem with crashed Java Virtual Mashines without error message. I often do some checks in my code. Something went wrong, if one of these checks will not be fulfilled and the java program shall not carry on. E.G.:
if(!constraint){
System.err.println("The constraint is not fullfilled!");
System.exit(-1);
}
Can I be sure, that an error message with System.err.println("...") is printed on the console before the JVM is killed with System.exit(-1)? If not, this could explain why my JVM crashes without error message.
System.out leads the output to the standard output stream (normally mapped to the console screen). System.err leads the output to the standard error stream (and, by default to the console). The idea behind having these two is that the standard output should be used for regular program output, and standard error should be used for error messages. Depend how to load a java program the error stream is not printed on console.
Both the streams can be redirected to different destinations. If it is desired to redirect the output to an output file and error messages to a different log file, than on UNIX it can be done as follows:
This causes the regular output (using System.out) to be stored in output.log and error messages (using System.err) to be stored in error.log.
Another option is in your code redirect the outputs:
And in case of System.err:
The System.out and System.err is not a better solution to check this, I suggest to add a logger like SL4J to log this in appropriate file or output.