In my program I made an assert - which evaluates to false - from a runnable, but never see any console output about the assert. I want to know if my asserts are false, but it seems the runnable is catching all the thrown asserts?
Below is the simplest example program I could write to demonstrate. (Assertions are enabled. The program would behave differently if they weren't and print both lines instead of just the one). The output of the program is.
About to assert False
That's it. After that the assert statement throws and is caught by something and I never know about it. I want to know about it, what am I doing wrong?
import java.nio.ByteBuffer;
import java.util.concurrent.*;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.FlowLayout;
import javax.swing.*;
class App
{
private static final ScheduledExecutorService sExecutor =
Executors.newSingleThreadScheduledExecutor();
// Main
public static void main(String[] args)
{
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() { createAndShowGUI(); } });
}
// Swing GUI
private static void createAndShowGUI()
{
// Just create a swing thing. Boring
JFrame frame = new JFrame("Title String");
JLabel label = new JLabel("Hello World");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(label);
frame.getContentPane().setLayout(new FlowLayout());
frame.pack();
frame.setVisible(true);
// ********************************************
// INTERESTING CODE HERE. We schedule a runnable which assert's false
// but we never see a console assert error!
// ********************************************
sExecutor.schedule(new Runnable()
{ @Override public void run() { doAssertFalse(); }}, 0, TimeUnit.SECONDS);
}
public static void doAssertFalse()
{
System.out.println("About to assert False");
assert false;
System.out.println("Done asserting False");
}
}