Search code examples
javajfaceasserteclipse-juno

JFace and Assertion ClassNotFoundException in Eclipse


I am going through examples in one book, and I experienced error for which I don't know exactly what is causing it and how to resolve it.

OS: Windows7 64bit, Eclipse IDE for Java Developers, JFace installed or better to say jars attached to project, default ones which comess with Eclipse:

  • org.eclipse.jface_3.8.102.v20130123-162658.jar
  • org.eclipse.jface.databinding_1.6.0.v20120912-132807.jar
  • org.eclipse.jface.text_3.8.2.v20121126-164145.jar

Here is the application code:

import org.eclipse.jface.viewers.ColumnWeightData;
import org.eclipse.jface.viewers.TableLayout;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.swt.widgets.TableItem;

public class TableLayoutExample {
    public static void main(String[] args) {
        Display display = new Display();
        Shell shell = new Shell(display);

        shell.setSize(500, 400);
        shell.setText("Table Example");
        shell.setLayout(new FillLayout());

        TableLayout layout = new TableLayout();
        layout.addColumnData(new ColumnWeightData(40, 80, true));
        layout.addColumnData(new ColumnWeightData(40, 80, true));
        layout.addColumnData(new ColumnWeightData(40, 80, true));
        Table table = new Table(shell, SWT.SINGLE);
        table.setLayout(layout);
        TableColumn column1 = new TableColumn(table, SWT.CENTER);
        TableColumn column2 = new TableColumn(table, SWT.CENTER);
        TableColumn column3 = new TableColumn(table, SWT.CENTER);
        TableItem item = new TableItem(table, SWT.NONE);
        item.setText(new String[] { "column 1", "column 2", "column 3" });
        item = new TableItem(table, SWT.NONE);
        item.setText(new String[] { "a", "b", "c" });

        shell.open();
        while (!shell.isDisposed()) {
            if (!display.readAndDispatch())
                display.sleep();
        }
        display.dispose();
    }
}

And here is the error:

Exception in thread "main" java.lang.NoClassDefFoundError: org/eclipse/core/runtime/Assert
    at org.eclipse.jface.viewers.ColumnWeightData.<init>(ColumnWeightData.java:70)
    at TableLayoutExample.main(TableLayoutExample.java:21)
Caused by: java.lang.ClassNotFoundException: org.eclipse.core.runtime.Assert
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    ... 2 more

Any ideas what might gone wrong?


Solution

  • From Download eclipse-equinox-common-3.5.0.jar:

    Files contained in eclipse-equinox-common-3.5.0.jar: 
    
    .api_description
    META-INF/ECLIPSEF.RSA
    META-INF/ECLIPSEF.SF
    META-INF/MANIFEST.MF
    META-INF/eclipse.inf
    
    ...
    
    org.eclipse.core.runtime.Assert.class
    org.eclipse.core.runtime.AssertionFailedException.class
    

    So it looks like you are missing the latest version of eclipse-equinox-common.jar or it is not in your classpath ...