Pergunta

ISENÇÃO DE RESPONSABILIDADE:

este é o caso clássico da GUI do .NET tentando contornar as coisas do JAVA.

DESCRIÇÃO DO PROBLEMA:

Estou tentando construir uma GUI muito simples com JFace e SWT - o código é direto (há muitos tutoriais), o que não é tão simples é que não consigo fazer o JFace e o SWT funcionarem fora de um projeto de plug-in.

Eu esperaria poder usar JFace e SWT em meu projeto sem problemas, já que coloquei "C:/Eclipse 3.5/plugins" em meu CLASSPATH (do meu computador -> propriedades -> avançado -> variáveis ​​de ambiente) e todos os swt-*.dll que pude encontrar em meu PATH (usuário local e PATHs globais, com certeza) como Este artigo indica na caixa "Instalando SWT e JFace".

O problema é que não posso importar nada do eclipse.org, a menos que faça referência direta aos jars do buildpath -> bibliotecas -> adicionar jars externos (para que ele seja compilado, tenho que adicionar os seguintes jars: org.eclipse.swt.win32.win32.x86_3.5.1.v3555a.jar, org.eclipse.jface_3.5.1.M20090826-0800.jar).Depois de fazer isso, ele funciona bem, mas quando o executo como "Aplicativo Java", recebo o seguinte erro (devo CORRER COMO algo mais?):

Exception in thread "main" java.lang.NoClassDefFoundError: org/eclipse/core/runtime/IProgressMonitor
    at demo.ui.test.EntryPoint.main(EntryPoint.java:18)
Caused by: java.lang.ClassNotFoundException: org.eclipse.core.runtime.IProgressMonitor
    at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
    at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
    ... 1 more

Tentei depurar isso e basicamente ele é lançado assim que tenta instanciar o ApplicationWindow classe (org.eclipse.jface.window.ApplicationWindow).Tentando reproduzir o erro, comentei todo o meu código e substituí-o pelo seguinte no meu main e gerou o mesmo erro acima na primeira linha:

ApplicationWindow w = new ApplicationWindow(null); //<-- error on this line
w.setBlockOnOpen(true);
w.open();
Display.getCurrent().dispose();

QUESTÕES:

Questão 1:como posso corrigir o erro acima (gostaria de entender o que está acontecendo) e fazer a maldita coisa funcionar?

Questão 2:por que os potes não ficam visíveis no meu projeto e como fazê-los?

Provavelmente estou perdendo algo muito trivial devido à minha falta de familiaridade com Java e Eclipse.Qualquer ajuda muito apreciada!

EDITAR:parece que outra pessoa teve o mesmo problema -> http://www.eclipsezone.com/eclipse/forums/t60528.html - não está muito claro como eles resolveram o problema, agradecemos a ajuda

Foi útil?

Solução

IProgressMonitor interface não está disponível nos dois jars que você usa.Você também precisa colocar org.eclipse.equinox.common plugin no seu caminho de classe. IProgressMonitor pode ser usado sem todo o ambiente Eclipse em execução.

(Esta é a solução do artigo ao qual você se refere.Originalmente, pensei que o IProgressMonitor estivesse no plug-in org.eclipse.core.runtime, mas foi movido para org.eclipse.equinox.common conforme descrito em erro #122935)

Outras dicas

Ecoando o argumento de Peter acima, sempre tenho que adicionar vários JARs para fazer as coisas funcionarem (especialmente para JFace).Normalmente, vou precisar

./org.eclipse.core.commands_3.3.0.I20070605-0010.jar
./org.eclipse.core.runtime_3.3.100.v20070530.jar
./org.eclipse.equinox.common_3.3.0.v20070426.jar
./org.eclipse.jface_3.3.1.M20070910-0800b.jar
./org.eclipse.osgi_3.3.2.R33x_v20080105.jar
./org.eclipse.ui.forms_3.3.0.v20070511.jar

Você pode usar algo como o jarfinder para ajudar a identificar quais arquivos residem em quais JARs.No Windows, lembro-me de usar o recurso localizar para procurar, digamos, IProgressMonitor.class em arquivos zip/jar na pasta Eclipse no sistema de arquivos - já que às vezes os JARs reais podem ser difíceis de rastrear.

Normalmente trabalho vendo o que falha, rastreando/adicionando o JAR, enxágue e repita.

Fazer RCP/plugins parece que o Eclipse cuida de muitos dos problemas para você, fazer seu próprio aplicativo independente vem com essa bagagem extra, mas é muito bom ter uma GUI autônoma de aparência nativa adequada, se você continuar com ela.Portanto, normalmente configuro projetos Eclipse vanilla (sem plug-in) e isso força você a enfrentar esses problemas (adicionar JARs ao caminho de classe manualmente).Também é útil quando você deseja distribuir seu projeto.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top