Java 刷新图像视图

Java 刷新图像视图,java,imageview,refresh,Java,Imageview,Refresh,我是一名cobol结构化程序员,正在向Java OOP迈进。我编写了一个雄心勃勃的卡片程序,其中一个用户与3个计算机对手进行游戏。它正在工作,但3名计算机对手和用户之间没有延迟。我希望看起来每个对手都在单独打一张牌。用户玩游戏,每个对手使用setImageDrawable更新两个ImageView。屏幕在到达用户的OnClickListener之前不会更新。我在每次电脑播放后都尝试了Thread.sleep,这会使屏幕保持可更新状态,但是当出现延迟时,屏幕直到OnClickListener才刷新

我是一名cobol结构化程序员,正在向Java OOP迈进。我编写了一个雄心勃勃的卡片程序,其中一个用户与3个计算机对手进行游戏。它正在工作,但3名计算机对手和用户之间没有延迟。我希望看起来每个对手都在单独打一张牌。用户玩游戏,每个对手使用
setImageDrawable
更新两个
ImageView
。屏幕在到达用户的
OnClickListener
之前不会更新。我在每次电脑播放后都尝试了
Thread.sleep
,这会使屏幕保持可更新状态,但是当出现延迟时,屏幕直到
OnClickListener
才刷新。我没有一个
LayoutInflater
,因为没有什么可充气的-我所有的
imageview
都挤进了屏幕。我在Android Studio中尝试了一些模拟器,但它们都有这种影响。我还尝试在全屏上无效,但没有成功——也许我应该在个人
图像视图上无效

我会发布一些代码,但它相当冗长和草率,我希望我已经足够好地描述了这个问题。有什么想法可以修复吗?或者你能推荐一些我可以探索的Java特性吗?我的网络有点不稳定,所以可能会延迟回复,或者感谢您的问题或答案。

每个计算机对手将一个Arraylist传递给一个通用方法,该方法选择一张扑克牌,然后更改ImageView以显示扑克牌

            Resources res = getResources();
        int resId = res.getIdentifier(cardSelect, "drawable", getPackageName());  // location of image
        Drawable drawable = ResourcesCompat.getDrawable(getResources(), res.getIdentifier(cardSelect, "drawable", getPackageName()), null);
        ImageView insertImage = (ImageView) findViewById(R.id.p1CardView);
        insertImage.setImageDrawable(drawable);
它使用相同类型的编码来更新屏幕上的另一个图像。在第三台计算机对手玩过之后,用户的可玩卡被标记为可点击,然后程序等待OnClick。此时,计算机播放的图像变化会突然出现在用户标记的卡上,而不是在上面设置ImageDrawable时。希望对你有帮助


谢谢

如果没有一些代码,很难判断发生了什么。但是您是否正在
swing更新线程上运行swing更新。使用swing时,必须在正确的线程中运行。程序中没有指定单独的线程。Thread.sleep只是我从web上复制的东西,它确实会让程序进入睡眠状态。我应该考虑将程序划分为不同的线程吗?谢谢你能概述一下你的代码吗。我要强调的一点是,使用Swing时,它将在代码中运行,然后坐在那里什么也不做,直到触发类似
OnClickListener
的事件。如果您有大型机CICS/IMSDC背景,请将Swing想象为发送屏幕时有点像CICS/IMSDC,那么您的程序将死亡。然后,当用户点击enter/PF键时,相应的程序就会运行。在这个回答中,我试图向非大型机解释CICS,但不确定它是否有帮助。谢谢Bruce!每个计算机对手都会将其扑克牌的阵列列表传递给一个方法,该方法确定要玩的牌,然后将其显示在他们的丢弃图像视图上,如果没有一些代码,很难判断发生了什么。但是您是否正在
swing更新线程上运行swing更新。使用swing时,必须在正确的线程中运行。程序中没有指定单独的线程。Thread.sleep只是我从web上复制的东西,它确实会让程序进入睡眠状态。我应该考虑将程序划分为不同的线程吗?谢谢你能概述一下你的代码吗。我要强调的一点是,使用Swing时,它将在代码中运行,然后坐在那里什么也不做,直到触发类似
OnClickListener
的事件。如果您有大型机CICS/IMSDC背景,请将Swing想象为发送屏幕时有点像CICS/IMSDC,那么您的程序将死亡。然后,当用户点击enter/PF键时,相应的程序就会运行。在这个回答中,我试图向非大型机解释CICS,但不确定它是否有帮助。谢谢Bruce!每个计算机对手将其扑克牌的阵列列表传递给一个方法,该方法确定要玩的牌,然后使用