私のプログラムでは、実行可能ファイルからアサート (false と評価される) を作成しましたが、アサートに関するコンソール出力は表示されません。アサートが偽かどうかを知りたいのですが、ランナブルがスローされたアサートをすべてキャッチしているように見えますか?
以下は、デモンストレーションのために私が書くことができる最も単純なサンプル プログラムです。(アサーションが有効になっています。そうでない場合、プログラムは異なる動作をし、1 行だけではなく両方の行を出力します)。プログラムの出力は次のとおりです。
False をアサートしようとしています
それでおしまい。その後、 assert ステートメントがスローされ、何かに引っ掛かりますが、それについてはわかりません。それについて知りたいのですが、何が間違っていますか?
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");
}
}