Kotlin-java.lang.IllegalStateException:无法为android执行方法:onClick
这就是XML布局 因为太长了,我从垃圾桶里走过 我正试图建立一个井字游戏,它的工作非常完美,但当我点击最后一个按钮,它将在该行的应用程序得到粉碎。它的工作很好,但我不知道为什么它会给我这个错误Kotlin-java.lang.IllegalStateException:无法为android执行方法:onClick,java,android,android-studio,kotlin,Java,Android,Android Studio,Kotlin,这就是XML布局 因为太长了,我从垃圾桶里走过 我正试图建立一个井字游戏,它的工作非常完美,但当我点击最后一个按钮,它将在该行的应用程序得到粉碎。它的工作很好,但我不知道为什么它会给我这个错误 E/AndroidRuntime: FATAL EXCEPTION: main Process: com.ziadabouelfarah.tictactoy, PID: 6182 java.lang.IllegalStateException: Could not execute meth
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.ziadabouelfarah.tictactoy, PID: 6182
java.lang.IllegalStateException: Could not execute method for android:onClick
at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:390)
at android.view.View.performClick(View.java:6256)
at android.view.View$PerformClick.run(View.java:24701)
at android.os.Handler.handleCallback(Handler.java:789)
at android.os.Handler.dispatchMessage(Handler.java:98)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6541)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Method.invoke(Native Method)
at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:385)
at android.view.View.performClick(View.java:6256)
at android.view.View$PerformClick.run(View.java:24701)
at android.os.Handler.handleCallback(Handler.java:789)
at android.os.Handler.dispatchMessage(Handler.java:98)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6541)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
at com.android.internal.os.ZygoteInit.amin(ZygoteInit.java:767)
Caused by: java.lang.IllegalArgumentException: bound must be positive
at java.util.Random.nextInt(Random.java:388)
at com.agefinder.hell.MainActivity.autoPlay(MainActivity.kt:173)
at com.agefinder.hell.MainActivity.PlayGame(MainActivity.kt:54)
at com.agefinder.hell.MainActivity.buSelect(MainActivity.kt:37)
at java.lang.reflect.Method.invoke(Native Method)
at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:385)
at android.view.View.performClick(View.java:6256)
at android.view.View$PerformClick.run(View.java:24701)
at android.os.Handler.handleCallback(Handler.java:789)
at android.os.Handler.dispatchMessage(Handler.java:98)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6541)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
我在Kotlin中的代码如下所示:
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main)
}
fun buSelect(view:View){
val buSelected= view as Button
var cellID=0
when(buSelected.id){
R.id.bt1-> cellID=1
R.id.bt2-> cellID=2
R.id.bt3-> cellID=3
R.id.bt4-> cellID=4
R.id.bt5-> cellID=5
R.id.bt6-> cellID=6
R.id.bt7-> cellID=7
R.id.bt8-> cellID=8
R.id.bt9-> cellID=9
}
// Toast.makeText(this,"ID:"+ cellID, Toast.LENGTH_LONG).show()
PlayGame(cellID,buSelected)
Thread.sleep(500)
}
var player1=ArrayList<Int>()
var player2=ArrayList<Int>()
var ActivePlayer=1
fun PlayGame(cellID:Int,buSelected:Button){
if(ActivePlayer==1){
buSelected.text="X"
buSelected.setBackgroundResource(R.color.pink)
player1.add(cellID)
ActivePlayer=2
//Thread.sleep(500)
autoPlay()
}else{
buSelected.text="O"
buSelected.setBackgroundResource(R.color.colorPrimaryDark)
player2.add(cellID)
ActivePlayer=1
}
buSelected.isEnabled=false
CheckWiner()
}
fun CheckWiner(){
var winer=-1
// row 1
if(player1.contains(1) && player1.contains(2) && player1.contains(3)){
winer=1
}
if(player2.contains(1) && player2.contains(2) && player2.contains(3)){
winer=2
}
// row 2
if(player1.contains(4) && player1.contains(5) && player1.contains(6)){
winer=1
}
if(player2.contains(4) && player2.contains(5) && player2.contains(6)){
winer=2
}
// row 3
if(player1.contains(7) && player1.contains(8) && player1.contains(9)){
winer=1
}
if(player2.contains(7) && player2.contains(8) && player2.contains(9)){
winer=2
}
// col 1
if(player1.contains(1) && player1.contains(4) && player1.contains(7)){
winer=1
}
if(player2.contains(1) && player2.contains(4) && player2.contains(7)){
winer=2
}
// col 2
if(player1.contains(2) && player1.contains(5) && player1.contains(8)){
winer=1
}
if(player2.contains(2) && player2.contains(5) && player2.contains(8)){
winer=2
}
// col 3
if(player1.contains(3) && player1.contains(6) && player1.contains(9)){
winer=1
}
if(player2.contains(3) && player2.contains(6) && player2.contains(9)){
winer=2
}
if(player1.contains(1) && player1.contains(5) && player1.contains(9)){
winer=1
}
if(player2.contains(1) && player2.contains(5) && player2.contains(9)){
winer=2
}
if(player1.contains(3) && player1.contains(5) && player1.contains(7)){
winer=1
}
if(player2.contains(3) && player2.contains(5) && player2.contains(7)){
winer=2
}
if( winer != -1){
if (winer==1){
Toast.makeText(this," Player 1 win the game", Toast.LENGTH_LONG).show()
}else{
Toast.makeText(this," Computer win the game", Toast.LENGTH_LONG).show()
}
}
}
//var buSelect:Button?=null
fun autoPlay(){
var buSelect:Button?=null
val emptyCells=ArrayList<Int>()
for ( cellID in 1..9){
if(!( player1.contains(cellID) || player2.contains(cellID))) {
emptyCells.add(cellID)
}
}
val r=Random()
val randIndex=r.nextInt(emptyCells.size-0)+0
val cellID= emptyCells[randIndex]
buSelect = when(cellID){
1-> bt1
2-> bt2
3-> bt3
4-> bt4
5-> bt5
6-> bt6
7-> bt7
8-> bt8
9-> bt9
else->{
bt1
}
}
//Thread.sleep(500)
PlayGame(
cellID,
buSelect!!
)
}
}
class MainActivity:AppCompatActivity(){
重写创建时的乐趣(savedInstanceState:Bundle?){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main)
}
fun buSelect(视图:视图){
val buSelected=查看为按钮
var cellID=0
何时(buSelected.id){
R.id.bt1->cellID=1
R.id.bt2->cellID=2
R.id.bt3->cellID=3
R.id.bt4->cellID=4
R.id.bt5->cellID=5
R.id.bt6->cellID=6
R.id.bt7->cellID=7
R.id.bt8->cellID=8
R.id.bt9->cellID=9
}
//Toast.makeText(这个,“ID:+cellID,Toast.LENGTH\u LONG.show())
游戏(cellID、buSelected)
线程。睡眠(500)
}
var player1=ArrayList()
var player2=ArrayList()
var ActivePlayer=1
有趣的游戏(cellID:Int,buSelected:Button){
如果(ActivePlayer==1){
buSelected.text=“X”
buSelected.setBackgroundResource(R.color.pink)
player1.add(cellID)
ActivePlayer=2
//线程。睡眠(500)
自动播放()
}否则{
buSelected.text=“O”
buSelected.setBackgroundResource(R.color.colorPrimaryDark)
player2.add(cellID)
ActivePlayer=1
}
buSelected.isEnabled=false
CheckWiner()
}
有趣的CheckWiner(){
var-winer=-1
//第1行
if(player1.contains(1)和&player1.contains(2)和&player1.contains(3)){
winer=1
}
if(player2.contains(1)和&player2.contains(2)和&player2.contains(3)){
温纳=2
}
//第2排
if(player1.包含(4)和&player1.包含(5)和&player1.包含(6)){
winer=1
}
if(player2.包含(4)和&player2.包含(5)和&player2.包含(6)){
温纳=2
}
//第3排
if(player1.contains(7)和&player1.contains(8)和&player1.contains(9)){
winer=1
}
if(player2.contains(7)和&player2.contains(8)和&player2.contains(9)){
温纳=2
}
//第1列
if(player1.contains(1)和&player1.contains(4)和&player1.contains(7)){
winer=1
}
if(player2.contains(1)和&player2.contains(4)和&player2.contains(7)){
温纳=2
}
//第2列
if(player1.contains(2)和&player1.contains(5)和&player1.contains(8)){
winer=1
}
if(player2.contains(2)和&player2.contains(5)和&player2.contains(8)){
温纳=2
}
//第3列
if(player1.contains(3)和&player1.contains(6)和&player1.contains(9)){
winer=1
}
if(player2.contains(3)和&player2.contains(6)和&player2.contains(9)){
温纳=2
}
if(player1.contains(1)和&player1.contains(5)和&player1.contains(9)){
winer=1
}
if(player2.包含(1)和&player2.包含(5)和&player2.包含(9)){
温纳=2
}
if(player1.contains(3)和&player1.contains(5)和&player1.contains(7)){
winer=1
}
if(player2.contains(3)和&player2.contains(5)和&player2.contains(7)){
温纳=2
}
如果(winer!=-1){
如果(winer==1){
Toast.makeText(这是“玩家1赢得比赛”,Toast.LENGTH\u LONG.show())
}否则{
Toast.makeText(这是“计算机赢得比赛”,Toast.LENGTH\u LONG.show())
}
}
}
//var buSelect:按钮?=null
趣味自动播放(){
var buSelect:按钮?=null
val emptyCells=ArrayList()
对于(1..9中的cellID){
if(!(player1.contains(cellID)| | player2.contains(cellID))){
emptyCells.add(cellID)
}
}
val r=随机()
val randIndex=r.nextInt(空细胞大小-0)+0
val cellID=空细胞[randIndex]
buSelect=when(cellID){
1->bt1
2->bt2
3->bt3
4->bt4
5->bt5
6->bt6
7->bt7
8->bt8
9->bt9
其他->{
bt1
}
}
//线程。睡眠(500)
游戏(
细胞,
巴士选举!!
)
}
}
无法为android执行方法:onClick
也意味着执行有问题,这意味着onClick侦听器引发了异常
在您的案例中,r.nextInt(emptyCells.size-0)+0是罪魁祸首。边界必须为正,但emptyCells
为空,因此emptyCells.size
为0
你以前必须处理这个案子。最终你的游戏还是结束了
fun autoPlay(){
var buSelect: Button? = null
val emptyCells = ArrayList<Int>()
for (cellID in 1..9) {
if (!(player1.contains(cellID) || player2.contains(cellID))) {
emptyCells.add(cellID)
}
}
// if all cells have been checked, the game is over
if (emptyCells.isEmpty()) return
val r = Random()
val randIndex = r.nextInt(emptyCells.size)
val cellID = emptyCells[randIndex]
buSelect = when(cellID) {
1 -> bt1
2 -> bt2
3 -> bt3
4 -> bt4
5 -> bt5
6 -> bt6
7 -> bt7
8 -> bt8
9 -> bt9
else -> {
bt1
}
}
//Thread.sleep(500)
PlayGame(
cellID,
buSelect!!
)
}
fun autoPlay(){
var buSelect:按钮?=null
val emptyCells=ArrayList()
对于(1..9中的cellID){
if(!(player1.contains(cellID)| | player2.contains(cellID))){
emptyCells.add(cellID)
}
}
//如果所有单元格都已检查,则游戏结束
if(emptyCells.isEmpty())返回
val r=随机()
val randIndex=r.nextInt(空细胞大小)
val cellID=空细胞[randIndex]
buSelect=when(cellID){
1->bt1
2->bt2
3->bt3
4->bt4
5->bt5
6->bt6
7->bt7
8->bt8
9->bt9
其他->{
bt1
}
}
//线程。睡眠(500)
游戏(
细胞,
巴士选举!!
)