Problema com substance LAF

6 respostas
souarte

olá.
tava tentando usar o substance look and feel numa aplicação.
mas ele dá a seguint excessão:

<blockquote>org.jvnet.substance.api.UiThreadingViolationException: Component creation must be done on Event Dispatch Thread

at org.jvnet.substance.utils.SubstanceCoreUtilities.testComponentCreationThreadingViolation(SubstanceCoreUtilities.java:2312)

at org.jvnet.substance.SubstancePanelUI.createUI(SubstancePanelUI.java:57)

at sun.reflect.GeneratedMethodAccessor3.invoke(Unknown Source)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)

at java.lang.reflect.Method.invoke(Unknown Source)

at sun.reflect.misc.Trampoline.invoke(Unknown Source)

at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)

at java.lang.reflect.Method.invoke(Unknown Source)

at sun.reflect.misc.MethodUtil.invoke(Unknown Source)

at javax.swing.UIDefaults.getUI(Unknown Source)

at javax.swing.UIManager.getUI(Unknown Source)

at javax.swing.JPanel.updateUI(Unknown Source)

at org.mitre.cvw.ImageApp.refreshObjects(ImageApp.java:181)

at org.mitre.cvw.ImageApp.removeObjects(ImageApp.java:173)

at org.mitre.cvw.ImageApp.initObjects(ImageApp.java:272)

at org.mitre.cvw.CVWCoordinator.usersChange(CVWCoordinator.java:3956)

at org.mitre.cvw.CVWCoordinator.quitCommand(CVWCoordinator.java:1868)

at org.mitre.cvw.NetThread.run(NetThread.java:64)</blockquote>

na excessão diz que o componente deve ser criado na Event Dispatch Thread. mas eu tinha escrito os métodos assim:

public void refreshObjects() { SwingUtilities.invokeLater(new Runnable() { public void run() { setScrollbar(); updateUI(); } }); }

os outros métodos que aparecem na excessao eu também fiz assim, e mesmo assim deu erro.
alguem sabe qual o problema?

…talvez o problema seja eu né. mas esse tipo de resposta não ajuda, :slight_smile:

6 Respostas

R

Estou utilizando o look and Fell
assim e está funcionando.

// Look and Feel
			try {
				UIManager.setLookAndFeel(new SubstanceLookAndFeel());
				
				JFrame.setDefaultLookAndFeelDecorated(true);
				JDialog.setDefaultLookAndFeelDecorated(true);
				jaCargaLNF = true;
			} catch (Exception e1) {
				e1.printStackTrace();
			}
souarte

olá.
mas aqui ele não deixa eu instanciar o SubstanceLookandFeel.
ele diz que não pode ser instanciado.
ela é uma classe abstrata.

Luiz_Gustavo

souarte,

instancie uma das subclasses dele:

JFrame.setDefaultLookAndFeelDecorated(true);
try {
    UIManager.setLookAndFeel(new SubstanceBusinessBlackSteelLookAndFeel());
} catch (Exception e) {
    System.out.println("Error on LookAndFeel initialization! Using deafult LookAndFeel.");
}

[]'s

souarte

mas o meu problema não era esse.
bom agora descobri qual o problema. eu tava código SwingUtilities.invokeLater() na classe errada.
que burrice. a classe era a de uma cópia do projeto, então a classe original continuava com o código antigo.
mas agora outro problema. tá dando nullpointerexception em vários lugares. acho que vou desistir de usar o substance. o código ja era “baldiado” e vai ficar ainda mais.

Luiz_Gustavo

Poxa souarte, foi mal… pena que não ajudou muito.
Mas não consegui entender o motivo de dar tanto erro na utilização do Substance LAF.
Uma vez eu baixei, e tive problemas… mas depois verifiquei que a versão do LAF que eu tinha pego era pro java 6… e tava usando com java 5… dava um monte de pau.
Depois que peguei a versão certa, tudo funcionou normalmente.

Você está com a versão certa?

Tudo que eu faço para usar, é chamar esse código acima no meu método main:

public static void main(String args[]) {

        JFrame.setDefaultLookAndFeelDecorated(true);
        try {
            UIManager.setLookAndFeel(new SubstanceBusinessBlackSteelLookAndFeel());
        } catch (Exception e) {
            System.out.println("Error on LookAndFeel initialization! Using deafult LookAndFeel.");
        }       
}

Detalhe… antes de usar qualquer componente gráfico.

[]'s

souarte

tava usando com java 5… dava um monte de pau.
Depois que peguei a versão certa, tudo funcionou normalmente.

Você está com a versão certa?

cara! será que pode ser isso! vou ver amanhã. estou usando o java5. e baichei a versão mais nova do substance. pode ser que seja pra versão 6 né.
obrigado pela atenção cara!

Criado 25 de setembro de 2008
Ultima resposta 25 de set. de 2008
Respostas 6
Participantes 3