Erro: "Component creation must be done on Event Dispatch Thread"

5 respostas
E

Oi, pessoal. To criando um programinha que tá apresentando o erro abaixo:

run:
org.pushingpixels.substance.api.UiThreadingViolationException: Component creation must be done on Event Dispatch Thread
        at org.pushingpixels.substance.internal.utils.SubstanceCoreUtilities.testComponentCreationThreadingViolation(SubstanceCoreUtilities.java:1921)
        at org.pushingpixels.substance.internal.ui.SubstanceOptionPaneUI.createUI(SubstanceOptionPaneUI.java:82)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at sun.reflect.misc.Trampoline.invoke(MethodUtil.java:37)
        at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at sun.reflect.misc.MethodUtil.invoke(MethodUtil.java:244)
        at javax.swing.UIDefaults.getUI(UIDefaults.java:752)
        at javax.swing.UIManager.getUI(UIManager.java:989)
        at javax.swing.JOptionPane.updateUI(JOptionPane.java:1859)
        at javax.swing.JOptionPane.<init>(JOptionPane.java:1822)
        at javax.swing.JOptionPane.showOptionDialog(JOptionPane.java:841)
        at javax.swing.JOptionPane.showMessageDialog(JOptionPane.java:650)
        at javax.swing.JOptionPane.showMessageDialog(JOptionPane.java:621)
        at erro.Mensagens.mostraJanelaErro(Mensagens.java:27)
        at usuario.painelSplash$1.run(painelSplash.java:67)
        at java.lang.Thread.run(Thread.java:662)
UIDefaults.getUI() failed: createUI() failed for javax.swing.JOptionPane[,0,0,0x0,invalid,alignmentX=0.0,alignmentY=0.0,border=,flags=0,maximumSize=,minimumSize=,preferredSize=,icon=,initialValue=,message=Atenção: 
Cannot open database requested in login 'Mu1Online'. Login fails.,messageType=ERROR_MESSAGE,optionType=DEFAULT_OPTION,wantsInput=false] java.lang.reflect.InvocationTargetException
java.lang.Error
        at javax.swing.UIDefaults.getUIError(UIDefaults.java:712)
        at javax.swing.MultiUIDefaults.getUIError(MultiUIDefaults.java:133)
        at javax.swing.UIDefaults.getUI(UIDefaults.java:758)
        at javax.swing.UIManager.getUI(UIManager.java:989)
        at javax.swing.JOptionPane.updateUI(JOptionPane.java:1859)
        at javax.swing.JOptionPane.<init>(JOptionPane.java:1822)
        at javax.swing.JOptionPane.showOptionDialog(JOptionPane.java:841)
        at javax.swing.JOptionPane.showMessageDialog(JOptionPane.java:650)
        at javax.swing.JOptionPane.showMessageDialog(JOptionPane.java:621)
        at erro.Mensagens.mostraJanelaErro(Mensagens.java:27)
        at usuario.painelSplash$1.run(painelSplash.java:67)
        at java.lang.Thread.run(Thread.java:662)
org.pushingpixels.substance.api.UiThreadingViolationException: Component creation must be done on Event Dispatch Thread
        at org.pushingpixels.substance.internal.utils.SubstanceCoreUtilities.testComponentCreationThreadingViolation(SubstanceCoreUtilities.java:1921)
        at org.pushingpixels.substance.swingx.SubstancePanelUI.createUI(SubstancePanelUI.java:35)
        at sun.reflect.GeneratedMethodAccessor4.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at sun.reflect.misc.Trampoline.invoke(MethodUtil.java:37)
        at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at sun.reflect.misc.MethodUtil.invoke(MethodUtil.java:244)
        at javax.swing.UIDefaults.getUI(UIDefaults.java:752)
        at javax.swing.UIManager.getUI(UIManager.java:989)
        at javax.swing.JPanel.updateUI(JPanel.java:109)
        at javax.swing.JPanel.<init>(JPanel.java:69)
        at javax.swing.JPanel.<init>(JPanel.java:92)
        at javax.swing.JPanel.<init>(JPanel.java:100)
        at javax.swing.JRootPane.createGlassPane(JRootPane.java:528)
        at javax.swing.JRootPane.<init>(JRootPane.java:348)
        at javax.swing.JDialog.createRootPane(JDialog.java:611)
        at javax.swing.JDialog.dialogInit(JDialog.java:593)
        at javax.swing.JDialog.<init>(JDialog.java:260)
        at javax.swing.JOptionPane.createDialog(JOptionPane.java:942)
        at javax.swing.JOptionPane.showOptionDialog(JOptionPane.java:850)
        at javax.swing.JOptionPane.showMessageDialog(JOptionPane.java:650)
        at javax.swing.JOptionPane.showMessageDialog(JOptionPane.java:621)
        at erro.Mensagens.mostraJanelaErro(Mensagens.java:27)
        at usuario.painelSplash$1.run(painelSplash.java:67)
        at java.lang.Thread.run(Thread.java:662)
UIDefaults.getUI() failed: createUI() failed for javax.swing.JPanel[,0,0,0x0,invalid,layout=java.awt.FlowLayout,alignmentX=0.0,alignmentY=0.0,border=,flags=9,maximumSize=,minimumSize=,preferredSize=] java.lang.reflect.InvocationTargetException
java.lang.Error
        at javax.swing.UIDefaults.getUIError(UIDefaults.java:712)
        at javax.swing.MultiUIDefaults.getUIError(MultiUIDefaults.java:133)
        at javax.swing.UIDefaults.getUI(UIDefaults.java:758)
        at javax.swing.UIManager.getUI(UIManager.java:989)
        at javax.swing.JPanel.updateUI(JPanel.java:109)
        at javax.swing.JPanel.<init>(JPanel.java:69)
        at javax.swing.JPanel.<init>(JPanel.java:92)
        at javax.swing.JPanel.<init>(JPanel.java:100)
        at javax.swing.JRootPane.createGlassPane(JRootPane.java:528)
        at javax.swing.JRootPane.<init>(JRootPane.java:348)
        at javax.swing.JDialog.createRootPane(JDialog.java:611)
        at javax.swing.JDialog.dialogInit(JDialog.java:593)
        at javax.swing.JDialog.<init>(JDialog.java:260)
        at javax.swing.JOptionPane.createDialog(JOptionPane.java:942)
        at javax.swing.JOptionPane.showOptionDialog(JOptionPane.java:850)
        at javax.swing.JOptionPane.showMessageDialog(JOptionPane.java:650)
        at javax.swing.JOptionPane.showMessageDialog(JOptionPane.java:621)
        at erro.Mensagens.mostraJanelaErro(Mensagens.java:27)
        at usuario.painelSplash$1.run(painelSplash.java:67)
        at java.lang.Thread.run(Thread.java:662)
org.pushingpixels.substance.api.UiThreadingViolationException: Component creation must be done on Event Dispatch Thread
        at org.pushingpixels.substance.internal.utils.SubstanceCoreUtilities.testComponentCreationThreadingViolation(SubstanceCoreUtilities.java:1921)
        at org.pushingpixels.substance.swingx.SubstancePanelUI.createUI(SubstancePanelUI.java:35)
        at sun.reflect.GeneratedMethodAccessor4.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at sun.reflect.misc.Trampoline.invoke(MethodUtil.java:37)
        at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at sun.reflect.misc.MethodUtil.invoke(MethodUtil.java:244)
        at javax.swing.UIDefaults.getUI(UIDefaults.java:752)
        at javax.swing.UIManager.getUI(UIManager.java:989)
        at javax.swing.JPanel.updateUI(JPanel.java:109)
        at javax.swing.JPanel.<init>(JPanel.java:69)
        at javax.swing.JPanel.<init>(JPanel.java:92)
        at javax.swing.JPanel.<init>(JPanel.java:100)
        at javax.swing.JRootPane.createContentPane(JRootPane.java:503)
        at javax.swing.JRootPane.<init>(JRootPane.java:350)
        at javax.swing.JDialog.createRootPane(JDialog.java:611)
        at javax.swing.JDialog.dialogInit(JDialog.java:593)
        at javax.swing.JDialog.<init>(JDialog.java:260)
        at javax.swing.JOptionPane.createDialog(JOptionPane.java:942)
        at javax.swing.JOptionPane.showOptionDialog(JOptionPane.java:850)
        at javax.swing.JOptionPane.showMessageDialog(JOptionPane.java:650)
        at javax.swing.JOptionPane.showMessageDialog(JOptionPane.java:621)
        at erro.Mensagens.mostraJanelaErro(Mensagens.java:27)
        at usuario.painelSplash$1.run(painelSplash.java:67)
        at java.lang.Thread.run(Thread.java:662)
UIDefaults.getUI() failed: createUI() failed for javax.swing.JPanel[,0,0,0x0,invalid,layout=java.awt.FlowLayout,alignmentX=0.0,alignmentY=0.0,border=,flags=9,maximumSize=,minimumSize=,preferredSize=] java.lang.reflect.InvocationTargetException
java.lang.Error
        at javax.swing.UIDefaults.getUIError(UIDefaults.java:712)
        at javax.swing.MultiUIDefaults.getUIError(MultiUIDefaults.java:133)
        at javax.swing.UIDefaults.getUI(UIDefaults.java:758)
        at javax.swing.UIManager.getUI(UIManager.java:989)
        at javax.swing.JPanel.updateUI(JPanel.java:109)
        at javax.swing.JPanel.<init>(JPanel.java:69)
        at javax.swing.JPanel.<init>(JPanel.java:92)
        at javax.swing.JPanel.<init>(JPanel.java:100)
        at javax.swing.JRootPane.createContentPane(JRootPane.java:503)
        at javax.swing.JRootPane.<init>(JRootPane.java:350)
        at javax.swing.JDialog.createRootPane(JDialog.java:611)
        at javax.swing.JDialog.dialogInit(JDialog.java:593)
        at javax.swing.JDialog.<init>(JDialog.java:260)
        at javax.swing.JOptionPane.createDialog(JOptionPane.java:942)
        at javax.swing.JOptionPane.showOptionDialog(JOptionPane.java:850)
        at javax.swing.JOptionPane.showMessageDialog(JOptionPane.java:650)
        at javax.swing.JOptionPane.showMessageDialog(JOptionPane.java:621)
        at erro.Mensagens.mostraJanelaErro(Mensagens.java:27)
        at usuario.painelSplash$1.run(painelSplash.java:67)
        at java.lang.Thread.run(Thread.java:662)
org.pushingpixels.substance.api.UiThreadingViolationException: Component creation must be done on Event Dispatch Thread
        at org.pushingpixels.substance.internal.utils.SubstanceCoreUtilities.testComponentCreationThreadingViolation(SubstanceCoreUtilities.java:1921)
        at org.pushingpixels.substance.internal.ui.SubstanceRootPaneUI.createUI(SubstanceRootPaneUI.java:202)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at sun.reflect.misc.Trampoline.invoke(MethodUtil.java:37)
        at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at sun.reflect.misc.MethodUtil.invoke(MethodUtil.java:244)
        at javax.swing.UIDefaults.getUI(UIDefaults.java:752)
        at javax.swing.UIManager.getUI(UIManager.java:989)
        at javax.swing.JRootPane.updateUI(JRootPane.java:466)
        at javax.swing.JRootPane.<init>(JRootPane.java:353)
        at javax.swing.JDialog.createRootPane(JDialog.java:611)
        at javax.swing.JDialog.dialogInit(JDialog.java:593)
        at javax.swing.JDialog.<init>(JDialog.java:260)
        at javax.swing.JOptionPane.createDialog(JOptionPane.java:942)
        at javax.swing.JOptionPane.showOptionDialog(JOptionPane.java:850)
        at javax.swing.JOptionPane.showMessageDialog(JOptionPane.java:650)
        at javax.swing.JOptionPane.showMessageDialog(JOptionPane.java:621)
        at erro.Mensagens.mostraJanelaErro(Mensagens.java:27)
        at usuario.painelSplash$1.run(painelSplash.java:67)
        at java.lang.Thread.run(Thread.java:662)
UIDefaults.getUI() failed: createUI() failed for javax.swing.JRootPane[,0,0,0x0,invalid,layout=javax.swing.JRootPane$RootLayout,alignmentX=0.0,alignmentY=0.0,border=,flags=1,maximumSize=,minimumSize=,preferredSize=] java.lang.reflect.InvocationTargetException
java.lang.Error
        at javax.swing.UIDefaults.getUIError(UIDefaults.java:712)
        at javax.swing.MultiUIDefaults.getUIError(MultiUIDefaults.java:133)
        at javax.swing.UIDefaults.getUI(UIDefaults.java:758)
        at javax.swing.UIManager.getUI(UIManager.java:989)
        at javax.swing.JRootPane.updateUI(JRootPane.java:466)
        at javax.swing.JRootPane.<init>(JRootPane.java:353)
        at javax.swing.JDialog.createRootPane(JDialog.java:611)
        at javax.swing.JDialog.dialogInit(JDialog.java:593)
        at javax.swing.JDialog.<init>(JDialog.java:260)
        at javax.swing.JOptionPane.createDialog(JOptionPane.java:942)
        at javax.swing.JOptionPane.showOptionDialog(JOptionPane.java:850)
        at javax.swing.JOptionPane.showMessageDialog(JOptionPane.java:650)
        at javax.swing.JOptionPane.showMessageDialog(JOptionPane.java:621)
        at erro.Mensagens.mostraJanelaErro(Mensagens.java:27)
        at usuario.painelSplash$1.run(painelSplash.java:67)
        at java.lang.Thread.run(Thread.java:662)
CONSTRUÇÃO PARADA (tempo total: 8 segundos)

Já li outros tópicos mas ainda não entendi como resolver o problema.

Esse erro aparece na Janela de Splash que eu to fazendo, e justamente quando é pra aparecer uma janela de erro com a conexão ao banco de dados que eu forço à acontecer, por que quero tratar essa mensagem. Se eu setar os parâmetros de conexão corretos, não dá problema.

Utilizo o seguinte código pra mudar o Skin:

private static void setaTema(final Component objJanela){

        UIManager.put("ClassLoader", SubstanceLookAndFeel.class.getClassLoader());

        try {
            SwingUtilities.invokeLater(new Runnable() {

                public void run() {
                    SubstanceLookAndFeel.setSkin(new RavenSkin());
                }
            });
        } catch (Exception e) {
            Mensagens.mostraJanelaErro(e.getMessage(), objJanela);
        }

        objJanela.setVisible(true);
    }

}

Como parâmetro apenas passo o JFrame que eu quero que entre com Skin, no caso o Splash.

5 Respostas

R

QUALQUER trecho de código que envolva a biblioteca Swing deve ser executado no contexto da EDT (Event Dispatching Thread). Assim, o método setaTema() provavelmente teria de ser reescrito como:

private static void setaTema(final Component objJanela) {
  try {
    SwingUtilities.invokeLater(new Runnable() {
      public void run() {
        UIManager.put("ClassLoader", SubstanceLookAndFeel.class.getClassLoader());
        SubstanceLookAndFeel.setSkin(new RavenSkin());
        objJanela.setVisible(true);
      }
    });
  } catch (Exception e) {
    Mensagens.mostraJanelaErro(e.getMessage(), objJanela);
  }
}
E

roger_rf:
QUALQUER trecho de código que envolva a biblioteca Swing deve ser executado no contexto da EDT (Event Dispatching Thread). Assim, o método setaTema() provavelmente teria de ser reescrito como:

private static void setaTema(final Component objJanela) { try { SwingUtilities.invokeLater(new Runnable() { public void run() { UIManager.put("ClassLoader", SubstanceLookAndFeel.class.getClassLoader()); SubstanceLookAndFeel.setSkin(new RavenSkin()); objJanela.setVisible(true); } }); } catch (Exception e) { Mensagens.mostraJanelaErro(e.getMessage(), objJanela); } }

Refiz e ainda continuo com o mesmo problema.

R

Parece que seu método mostraJanelaErro() está tentando exibir um formulário via JOptionPane, mas a chamada está acontecendo fora do contexto da EDT. Tente o seguinte:

SwingUtilities.invokeLater(new Runnable() {  
  public void run() {  
    JOptionPane.showMessageDialog(/* seus parâmetros aqui */);
  }  
});
E

roger_rf:
Parece que seu método mostraJanelaErro() está tentando exibir um formulário via JOptionPane, mas a chamada está acontecendo fora do contexto da EDT. Tente o seguinte:

SwingUtilities.invokeLater(new Runnable() { public void run() { JOptionPane.showMessageDialog(/* seus parâmetros aqui */); } });

Hum, faz sentido. Mas essa mensagem que tento exibir é um alerta pop-up informando se ouve algum erro ao fazer a conexão, etc.

R

Se o método mostraJanelaErro() estiver sendo disparado de uma outra Thread que não a EDT, podem ocorrer erros. No seu caso, o Look-and-Feel Substance impõe que você faça TUDO que é relacionado a ele na EDT, e violar esta regra causa bugs; talvez esse problema não se manifestasse ao usar outro Look-and-Feel.

Criado 28 de dezembro de 2010
Ultima resposta 30 de dez. de 2010
Respostas 5
Participantes 2