그리드의 사각형이 내가 만든 Square라는 클래스로 표시되는 Tic-Tac-Toe 게임을 만들고 있습니다. 그것은 JButton을 확장하지만, 이라는 부울 필드를 추가했습니다. 버튼은 게임 내에서 버튼을 누를 수 있는지 여부를 나타냅니다. 버튼에 이미 문자가 있으면 버튼을 누를 수 없습니다. 가압 변수 변수를 확인하는 내 actionPerformed() 메소드에 코드를 구현하고 가압 가능이 거짓이면 사각형 문자를 변경하지 않습니다. 내 ActionEvent에 getSource() 메서드를 사용하여 누를 수있는 사각형에 대한 참조를 제공합니다. 따라서 프레스 가능 필드에 액세스 할 수 있도록 Square를 입력하기 위해 Object를 캐스팅해야합니다. 하지만 이렇게하면 다음과 같은 오류가 발생합니다. java.lang.ClassCastException: javax.swing.JButton cannot be cast to tic.tac.toe.Square
이것은 나에게 의미가 없습니다. 각 칸에 프레스 블럭이 필요하기 전에 JButton을 사용했습니다. 그러나 Square가 JButton을 상속 받기 때문에, 나는 그것이 잘 작동 할 것이라고 생각할 것입니다. 이 문제를 어떻게 해결할 수 있습니까?Java : 사용자 정의 클래스로 캐스팅 할 수 없음
답변
JVM이 당신에게 진실을 말하고있다 : getSource()
에 의해 반환 된 객체 것은하는 JButton 및 는 위의 문장에도 불구하고,하지 스퀘어 목적은 사실입니다. 사실, JButton에 ActionListener를 추가하고 Square 객체에이 아닌 을 추가하고 있습니다. 왜 코드인지 검사해야합니다. 도움이 더 필요하시면이 코드를 보여 주셔야합니다.
편집
당신의 상태 :
업데이트 주셔서 감사합니다.I looked into it and realized that my "Start" button was going through the same process, which is where the error came from.
이것은 모든 버튼에 대해 하나의 ActionListener를 사용하고 있음을 보여줍니다. 물론 모든 tic-tac-toe 버튼은 동일한 리스너를 사용할 수 있지만 다른 리스너 객체는 익명의 내부 클래스를 통해 별도의 리스너 객체를 사용해야합니다.
나는 그것을 조사하고 내 "시작"버튼이 오류가 발생한 곳인 동일한 프로세스를 진행하고 있다는 것을 깨달았습니다. 고맙습니다! – user3113531
@ user3113531 : 감사합니다. 답변은 편집을 참조하십시오. –
이 문제를 해결할 수있는 .setEnabled (false)로 처음 클릭 할 때 JButton을 비활성화 할 수 있습니다. 하지만 나는 HovercraftFullOfEels에 동의합니다.
- 1. 조각에서 캐스팅 할 수 없음
- 2. 사용자 정의 컨트롤을 캐스팅 할 수 없습니다.
- 3. 클래스를 사용자 지정 클래스로 캐스팅
- 4. com.google.gson.internal.LinkedTreeMap을 내 클래스로 캐스팅 할 수 없습니다.
- 5. Java의 사용자 정의 유형 캐스팅
- 6. java.lang.ClassCastException : oracle.sql.CLOB를 oracle.sql.CLOB에 캐스팅 할 수 없음
- 7. java.lang.ClassCastException : libcore.net.http.HttpURLConnectionImpl을 javax.net.ssl.HttpsURLConnection에 캐스팅 할 수 없음
- 8. 사용자 정의 사용자 클래스로 변환
- 9. Java 7 : Object에서 int 등으로 캐스팅 할 수 없음
- 10. ServiceStack.SessionFeature 사용자 정의 할 수 없음
- 11. java.lang.ClassCastException : CommonsMultipartFile을 oracle.sql.BFILE로 캐스팅 할 수 없음
- 12. DataItem을 사용자 지정 바인딩 시나리오의 DataRowView로 캐스팅 할 수 없음
- 13. 동일한 클래스로 캐스팅 할 때 ClassCastException이 발생했습니다.
- 14. JAVA-JAXB/필드를 클래스로 정의
- 15. 기본 생성자가없는 클래스로 캐스팅
- 16. 안드로이드 -보기에서 버튼으로 캐스팅 할 수 없음
- 17. View에서 Chronometer로 캐스팅 할 수 없음
- 18. java.lang.ClassCastException : java.lang.Integer를 java.lang.Double에 캐스팅 할 수 없음
- 19. java.lang.ClassCastException : org.antlr.runtime.CommonToken을 antlr.Token으로 캐스팅 할 수 없음
- 20. 객체를 ArrayList로 캐스팅 할 수 없음
- 21. java.lang.ClassCastException : com.marklogic.xcc.jndi.ContentSourceBeanFactory를 javax.naming.spi.InitialContextFactory로 캐스팅 할 수 없음
- 22. java.lang.ClassCastException : javax.mail.Session을 javax.mail.Session으로 캐스팅 할 수 없음
- 23. 사용자 정의 형식의 캐스팅 개체
- 24. 알 수없는 클래스로 캐스팅
- 25. 일반 하위 클래스로 캐스팅
- 26. "java.lang.ClassCastException : com.android.layoutlib.bridge.android.BridgeContext를 android.app.Activity로 캐스팅 할 수 없음"예외 수정
- 27. 캔트 캐스팅 사용자 정의 컨트롤
- 28. Actionscript에서 하위 클래스로 캐스팅
- 29. 런타임에 결정된 클래스로 캐스팅
- 30. System.Type을 특정 클래스로 캐스팅
안녕하세요. 질문 게시 방법에 대한 링크 (http://stackoverflow.com/questions/how-to-ask http://sscce.org/)를 읽어보십시오. 그렇게하면 더 나은 결과를 얻을 수 있습니다. 약간의 코드를 보여주는 것이 도움이 될 것입니다. http://stackoverflow.com/help/on-topic – OldProgrammer