Problemas com TreeViewer

3 respostas
maresp

estou iniciando no swt e fazendo o tutorial de
http://www-106.ibm.com/developerworks/library/os-ecgui1/?ca=dnt-43
tenho a exception abaixo em runtime:

java.lang.NoClassDefFoundError: org/eclipse/core/internal/boot/DelegatingURLClassLoader
	at org.eclipse.core.runtime.Platform.run(Platform.java:413)
	at org.eclipse.jface.viewers.StructuredViewer.updateItem(StructuredViewer.java:1271)
	at org.eclipse.jface.viewers.AbstractTreeViewer.createTreeItem(AbstractTreeViewer.java:320)
	at org.eclipse.jface.viewers.AbstractTreeViewer$1.run(AbstractTreeViewer.java:303)
	at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:69)
	at org.eclipse.jface.viewers.AbstractTreeViewer.createChildren(AbstractTreeViewer.java:289)
	at org.eclipse.jface.viewers.AbstractTreeViewer$5.run(AbstractTreeViewer.java:729)
	at org.eclipse.jface.viewers.StructuredViewer.preservingSelection(StructuredViewer.java:801)
	at org.eclipse.jface.viewers.AbstractTreeViewer.inputChanged(AbstractTreeViewer.java:721)
	at org.eclipse.jface.viewers.ContentViewer.setInput(ContentViewer.java:238)
	at org.eclipse.jface.viewers.StructuredViewer.setInput(StructuredViewer.java:991)
	at Explorer.createContents(Explorer.java:18)
	at org.eclipse.jface.window.Window.create(Window.java:302)
	at org.eclipse.jface.window.Window.open(Window.java:552)
	at Explorer.main(Explorer.java:26)
Exception in thread "main"

O problema é com um parâmetro tipo File("C:\") que está no Explorer.java, porém se eu coloco "C:\arquivo.txt" ele não dá pau, mas tb não me mostra nada na árvore.

Código abaixo:

FileTreeContentProvider.java
import java.io.*;
import org.eclipse.jface.viewers.*;

public class FileTreeContentProvider implements ITreeContentProvider
{
  public Object[] getChildren(Object element)
  {
	Object[] kids = ((File) element).listFiles();
	return kids == null ? new Object[0] : kids;
  }

  public Object[] getElements(Object element)
  {
	return getChildren(element);
  }

  public boolean hasChildren(Object element)
  {
	return getChildren(element).length > 0;
  }

  public Object getParent(Object element)
  {
	return ((File)element).getParent();
  }
  
  public void dispose()
  {
  }

  public void inputChanged(Viewer viewer, Object old_input, Object new_input)
  {
  }
}
Explorer.java
import java.io.*;

import org.eclipse.jface.viewers.*;
import org.eclipse.jface.window.*;
import org.eclipse.swt.widgets.*;

public class Explorer extends ApplicationWindow
{
  public Explorer()
  {
    super(null);
  }

  protected Control createContents(Composite parent)
  {
    TreeViewer tv = new TreeViewer(parent);
    tv.setContentProvider(new FileTreeContentProvider());
    tv.setInput(new File("C:\"));
    return tv.getTree();
  }

  public static void main(String[] args)
  {
    Explorer w = new Explorer();
    w.setBlockOnOpen(true);
    w.open();
    Display.getCurrent().dispose();
  }
}

Os códigos acima são idênticos ao do tutorial. Onde está o erro?

3 Respostas

Umlauf

Provavelmente você está usando o Eclipse 3.0, que não tem o package org.eclipse.runtime_2.1.0/runtime.jar (que o exemplo pede), onde estava a classe DelegatingURLClassLoader.

Tenta adicionar o package org.eclipse.core.boot_3.0.0/boot.jar às Libraries do Java Build Path.

maresp

Não… eu tô usando o 2.1.1… mas ele tb não tem esse pacote org.eclipse.runtime_2.1.1. O meu runtime.jar está em org.eclipse.core.runtime_2.1.1.

Já lí outros posts com a ausência desse pacote. O pessoal esquece o ‘core’ ou realmente existe um pacote org.eclipse.runtime_x.x.x?

Se existe eu não tenho…

maresp

Tá resolvido, acrescentei o org.eclipse.core.boot_2.1.1\boot.jar.

Criado 1 de setembro de 2003
Ultima resposta 2 de set. de 2003
Respostas 3
Participantes 2