java 板


LINE

虽然文章被锁了, 但我觉得这里有些东西还是蛮有讨论价值的, 故我也硬来回一篇了. 不过, 你的文章还是请修改好, 训练一下 良好的发问习惯, 对你对大家都有好处 这篇犯了两个大错误, 而两个错误我想蛮多初学者都会搞错, 我尝试简单说一说. 1) wait() 首先是用 wait() 的部份. 看来原 po 是完全误会了 wait 的用途. wait 是与 notify/notifyAll 搭配使用的, 要是你 不明白这堆是什麽, 那就代表你真的用错 而不是我误会了你 :P wait/notify 的功用是什麽, 请看小弟很久很久以前在别站贴 而又有转过来的文章 ( #14Q6Qq00 ) 2) UI Thread 改了 sleep(), 没错是能跑了, 可是好像中间发生的东西都不见 了, 只有结果, 是吗? 这也是新手常搞错的东西. 我猜你文中的 code 是在某 UI event 的 handler 中写的 对吗? (就是比如 button down event 发生时候跑的 code) 要理解为什麽会失去了中间发生的东西, 要先明白 UI thread/event thread 的概念. (以下的并不是 Java 特有, 我所知道的绝大部份 UI framework 都是类似) 用超简单的方法来形容, 就是有一条特别的 thread, 这条 thread 的 功用很多, 比如实际 update 画面, 和当有事件发生的时候 invoke 你的 event handler ┌──┐ │ ↓ │ 取event() │ ↓ │ 要是有 event, 跑 onClick(...) │ ↓ │ 绘画画面() └──┘ 这thread 做的就是不断的 loop 类似上面的流程. 最简单的情况, 现在你在 onClick 设 button 为蓝色, 实际上你只是把 button object 里的 "颜色" 设了值为 "蓝色" 而已, 这个动作并没有真 的去修改画面上的东西, 真正改变颜色是当 UI thread 跑到 "绘画画面()" 的时候, 再跟据那堆 UI 相关 Object 的状态画的. 好了, 你在 onClick 里设完绿色, sleep 10 秒, 再设蓝色, 这些动作都 不会影响 UI, 因为 UI thread 根本没机会跑到 "绘画画面()" 这一步, 到 绘画画面() 这一刻, 它只看到, "哦~ button 的颜色是 蓝, 我照着 画就行了" 所以, 在这些 event hook, 应该只做时间短的 logic, 不然, 不单画 面不如你所想的更新, 更会因为你的 onClick 让 UI thread 停着, 而不能继续去 取event(), 整个 UI 在这段时间内就完全没有反应了. 至於正确的做法? 其中一种做法: 先修改为绿色, 然後生成另外一条 thread (可利用 Timer), 这 thread 做的是: 1) 睡 10秒, 2) update button 为蓝色, 3)触发画面重绘. , 本身的 method 就直接 return, 好让 UI thread 能继续. 希望这些简介能帮助初学者 (其实我也是) 理解一下这两个常见 错误. --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.238.156.185
1F:→ adrianshum:补充一下, 文中提到的"UI thread" 有很多名字, 比如 01/18 18:08
2F:→ adrianshum:UI Thread, Event Loop, Event Dispatching Thread etc 01/18 18:09
3F:推 LaPass:推这篇 01/18 22:38
4F:推 p52189:推!!! 01/19 12:47







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Gossiping站内搜寻

TOP