Pessoal estou estudando para certificação e não estou entendendo a palavra chave instanceof.
Esta palavra chave verifica se um objeto é uma instancia de uma classe tipo:
String nome = “Murillo”
nome instanceof String; //Vai retornar true pois nome é uma instancia da classe String correto??
Agora pouco estava tentando descobrir de qual classe um jInternalFrame pertence. (Pesquisei aqui é vi que esta classe é uma subclasse de JComponent)
mas se eu tentar fazer uma comparação com instanceof deste tipo:
JInternalFrame teste = new JInternalFrame();
if (teste instanceof jFrame) {
//codigos aqui
}
Tenho erro de compilação
Mas se eu comparar desta maneira:
JInternalFrame teste = new JInternalFrame();
if (teste instanceof jComponent) {
//codigos aqui
}
Tudo bem sem erros de compilação.
Eu não estou entendendo por que o primeiro caso eu tenho um erro, não era apenas para retornar false???
[quote=dev.rafael]Isso é fácil kra! Isso acontece pq JInternalFrame é subclasse de JComponent mas ñ de JFrame. Basta vc dar uma olhada na documentação:
Adriano o erro da em tempo de execução não na compilação:
Exception in thread “AWT-EventQueue-0” java.lang.RuntimeException: Uncompilable source code - cannot find symbol
symbol: class jFrame
location: class formularioPrincipal.TelaPrincipal
at formularioPrincipal.TelaPrincipal.internalFrameContatos(TelaPrincipal.java:162)
at formularioPrincipal.TelaPrincipal.jButtonCadastroActionPerformed(TelaPrincipal.java:129)
at formularioPrincipal.TelaPrincipal.access$000(TelaPrincipal.java:26)
at formularioPrincipal.TelaPrincipal$1.actionPerformed(TelaPrincipal.java:67)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
at java.awt.Component.processMouseEvent(Component.java:6267)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
at java.awt.Component.processEvent(Component.java:6032)
at java.awt.Container.processEvent(Container.java:2041)
at java.awt.Component.dispatchEventImpl(Component.java:4630)
at java.awt.Container.dispatchEventImpl(Container.java:2099)
at java.awt.Component.dispatchEvent(Component.java:4460)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4577)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
at java.awt.Container.dispatchEventImpl(Container.java:2085)
at java.awt.Window.dispatchEventImpl(Window.java:2478)
at java.awt.Component.dispatchEvent(Component.java:4460)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
E que estou usando um IDE e confundi, a IDE me avisa que tem um erro:
[quote=Jesuino Master][quote=dev.rafael]Isso é fácil kra! Isso acontece pq JInternalFrame é subclasse de JComponent mas ñ de JFrame. Basta vc dar uma olhada na documentação:
Desculpe eu ñ a parte sobre a exceção. Aparentemente a JVM ñ está reconhecendo o simbolo jFrame o q faz muito sentido pq esse tipo ñ existe (a menos q vc o tenha criado). A swing possui um tipo JFrame (com J maiusculo). Mas como já foi citado esse é um erro e compilação e ñ de runtime. Posta ai seu código p/ q possamos dar uma olhada e tentar descobrir a origem do problema.
É que o Eclipse, em vez de simplesmente não gerar o .class quando há um erro de compilação, resolve gerar um class de qualquer maneira, e deixa o abacaxi para você descascar mais tarde - ou seja, um erro de execução (que deveria ter sido interpretado como um erro de compilação).
Se você é como eu e odeia tais erros estúpidos (que deveriam ter sido reportados antes), mude as opções do seu projeto:
Pessoal obrigado a todos que estão ajudando, mas vamos lá
1º) o meu JFrame da comparação realmente esta com letra minuscula “jFrame” erro muito idiota, mas mesmo que eu altere não é possivel fazer a comparação ele ainda da erro de compilação
2º) como estou fazendo uma aplicação simples para mostrar o uso de componentes swing na semana de tecnologia da minha faculdade, estou utilizando o netbeans, no eclipse ja tinha passado pelo mesmo problema (erros estupidos) e feito a alteração que nem lembrava mais vlw… Entretanto no netbeans não estou encontrando esta opção.
3º) Como assim raf4ever? quer dizer que se eu tiver um objeto jInternalFrame() eu so posso compara-lo com suas superclasses?? Que coisa de loko não?? e aproveitando o seu exemplo o que esta linha de seu codigo faz:
Object teste = new JInternalFrame(); // Ele cria um objeto da classe object?? não consegui entender esta declaração. Sei que todas os objetos extendem a classe Object mas neste caso não entendi!!!
Desculpa as duvidas besta mas tb estou estudando para certificação então é melhor entender tudo claramente né, até as coisas mais simples.
Obrigado