رفتن به مطلب
  • 0

ارور هنگام فراخانی برخی متدها در حالت ریلیز


DexterFstone

سوال

سلام وقتی میخوام بعضی متد ها را فراخانی کنم تیو حالت ریلیز ارور میده دلیلش چیه؟

کدم

Sub Timer_onTick(Tag As String,TimeUntil As Int)
	Select Tag
		Case "Show Level"
			Log(1)
			CanPlay = False
			Log(2)
			TopToPlay.Text = "Level " & CLevel
			Log(3)
			TopToPlay.Visible = True
			Log(4)
			TopToPlay.BringToFront
			Log(5)
			Timer.schedule("Hide Level",Timer.TimeUnit_SECONDS,1)
			Log(6)

و ارور

1
2
3
game_timer_ontick (java line: 561)
android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
	at android.view.ViewRootImpl.checkThread(ViewRootImpl.java:6903)
	at android.view.ViewRootImpl.invalidateChildInParent(ViewRootImpl.java:1084)
	at android.view.ViewGroup.invalidateChild(ViewGroup.java:5205)
	at android.view.View.invalidateInternal(View.java:13670)
	at android.view.View.invalidate(View.java:13634)
	at android.view.View.setFlags(View.java:11475)
	at android.view.View.setVisibility(View.java:8083)
	at anywheresoftware.b4a.objects.ViewWrapper.setVisible(ViewWrapper.java:271)
	at b4a.example.game._timer_ontick(game.java:561)
	at java.lang.reflect.Method.invoke(Native Method)
	at anywheresoftware.b4a.BA.raiseEvent2(BA.java:213)
	at com.persian.timer.PersianTimer.Run(PersianTimer.java:72)
	at com.persian.timer.PersianTimer.access$000(PersianTimer.java:23)
	at com.persian.timer.PersianTimer$1.run(PersianTimer.java:51)
	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:428)
	at java.util.concurrent.FutureTask.run(FutureTask.java:237)
	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:272)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
	at java.lang.Thread.run(Thread.java:761)

 

لینک ارسال
به اشتراک گذاری در سایت های دیگر

7 پاسخ به این سوال تاکنون داده شده است

ارسال‌های توصیه شده

بجای CallSub و Thread از CallSubDelyed استفاده کردم و مشکل حل شد

لینک ارسال
به اشتراک گذاری در سایت های دیگر

سلام

به این بخش از متن خطا دقت کنید متوجه میشید چرا این خطا رخ میده:

Only the original thread that created a view hierarchy can touch its views.

این ارور میگه که شما نمیتونین ویو ها و هرچیزی که مربوط به رابط کاربری و دیزاین هست رو توی تردی غیر از ترد اصلی انجام بدین.

ما به طور پیشفرض کلا یه ترد یا نخ داریم که در حالت معمولی کل کارها روی اون انجام میشه و اگه بخوایم سرعت برنامه بالاتر بره و هندل کردن کارها سریعتر و آسون تر بشه میتونیم از مولتی ترد یا همون چند نخی استفاده کنیم و هر کاری رو بدیم یه نخ انجام بده. ما میتونیم هرکاری رو بدیم نخ های دیگه انجام بدن به جز کارهای گرافیکی! کارهای گرافیکی فقط باید توی همون نخ پیشفرض یا نخ اصلی انجام بشه.

حالا یا شما خودتون این مولتی تردی رو پیاده کردین یا توی اون کتابخونه تایمر مولتی تردی رو پیاده کردن که کارها سریع تر و بهتر انجام بشه. شما اون کدهایی که مربوط به رابط کاربری هست رو توی یه کلاسی قرار بدین و با CallSub بهش وصل بشین ببینین باز فورس کلوز رخ میده یا نه!

لینک ارسال
به اشتراک گذاری در سایت های دیگر

در ۱۴۰۱/۴/۱۲ در 18:39، امیرحسین قاسمی گفته است:

شما اون کدهایی که مربوط به رابط کاربری هست رو توی یه کلاسی قرار بدین و با CallSub بهش وصل بشین ببینین باز فورس کلوز رخ میده یا نه!

من الان تمام کدهام توی ی کلاس قرار دادم یعنی این کار غلطه؟ چون نمیخوام Main خیلی شلوغ بشه

لینک ارسال
به اشتراک گذاری در سایت های دیگر

در ۱۴۰۱/۴/۱۲ در ۰۷:۵۴، DexterFstone گفته است:

من الان تمام کدهام توی ی کلاس قرار دادم یعنی این کار غلطه؟ چون نمیخوام Main خیلی شلوغ بشه

خیر اصلا کار اشتباهی نیست اتفاقا خیلی هم عالیه و این کار شما همون شی گرایی هست!

لینک ارسال
به اشتراک گذاری در سایت های دیگر

متاسفانه همچنان مشکل هست و CallSub هیچ کمکی نکرد

کتابخانه Thread هم تست کردم و فقط چندجا مشکل را حل کرد

لینک ارسال
به اشتراک گذاری در سایت های دیگر

در ۱۴۰۱/۴/۱۳ در ۰۰:۱۵، DexterFstone گفته است:

متاسفانه همچنان مشکل هست و CallSub هیچ کمکی نکرد

کتابخانه Thread هم تست کردم و فقط چندجا مشکل را حل کرد

این کتابخونه رو امتحان کنین.

MyThread.RunOnGuiThread("ChangeViews" , Null)

Sub ChangeViews
  Label1.Visible = True
  Label1.Text="The label became visible!"
End Sub

 

لینک ارسال
به اشتراک گذاری در سایت های دیگر

در ۱۴۰۱/۴/۱۳ در 13:14، امیرحسین قاسمی گفته است:

این کتابخونه رو امتحان کنین.

MyThread.RunOnGuiThread("ChangeViews" , Null)

Sub ChangeViews
  Label1.Visible = True
  Label1.Text="The label became visible!"
End Sub

 

بله اینا تست کردم ولی خب برای Sub با مقدار بازگشتی باید چیکار کنم؟ پارامتر هم که بش میدم بازم انگار مشکل داره

لینک ارسال
به اشتراک گذاری در سایت های دیگر

بایگانی شده

این موضوع بایگانی و قفل شده و دیگر امکان ارسال پاسخ نیست.

  • کاربران آنلاین در این صفحه   0 کاربر

    • هیچ کاربر عضوی،در حال مشاهده این صفحه نیست.
×
×
  • اضافه کردن...