Java me 有人能给我解释一下这个密码吗?
这段代码中的大部分内容我都知道使用的原因,但是其他的东西Java me 有人能给我解释一下这个密码吗?,java-me,Java Me,这段代码中的大部分内容我都知道使用的原因,但是其他的东西 import javax.microedition.lcdui.*; import javax.microedition.midlet.*; public class SlideImage extends MIDlet{ private Display display; public void startApp(){ display = Display.getDisplay(this); display.set
import javax.microedition.lcdui.*;
import javax.microedition.midlet.*;
public class SlideImage extends MIDlet{
private Display display;
public void startApp(){
display = Display.getDisplay(this);
display.setCurrent(new IconsCanvas());
}
public void pauseApp(){}
public void destroyApp(boolean unconditional){
notifyDestroyed();
}
}
class IconsCanvas extends Canvas implements Runnable{
SlideMenu menu = null;
public IconsCanvas(){
Image[] image = new Image[10];
try{
image[0] = Image.createImage("/bollywood-height.png");
image[1] = Image.createImage("/212229_1193669628.png");
image[2] = Image.createImage("/95936_50.png");
image[3] = Image.createImage("/shreya.png");
image[4] = Image.createImage("/Aishw.png");
image[5] = Image.createImage("/karishma.png");
image[6] = Image.createImage("/tmb_jiahkhannishabd.png");
image[7] = Image.createImage("/amisha.png");
image[8] = Image.createImage("/shilpashetty.png");
image[9] = Image.createImage("/priti.png");
menu = new SlideMenu(new String[]{"1", "2", "3", "4",
"5", "6", "7", "8", "9", "10"},
image, getWidth(), getHeight());
new Thread(this).start();
}catch(Exception e){
e.printStackTrace();
}
}
protected void paint(Graphics g){
menu.paint(g);
}
public void keyPressed(int key){
int gameKey = getGameAction(key);
if(gameKey == Canvas.RIGHT){
menu.slideItem(1);
}else if(gameKey == Canvas.LEFT){
menu.slideItem(- 1);
}
}
public void run(){
try{
while(true){
repaint();
synchronized(this){
wait(100L);
}
}
}catch(Exception e){
e.printStackTrace();
}
}
}
上面这些东西,我发现很难知道它们为什么被使用…它(您最初的代码片段,运行方法)看起来像一个线程,它的唯一任务就是每隔十分之一秒重新绘制组件
至于它指的是什么组件,您没有提供足够的信息。它取决于运行run()
的对象
就synchronized
位而言,这很可能是一种防止其他线程在睡眠
期间对组件执行操作的方法
如果this
是对象xyz
,则尝试执行以下块的任何其他线程:
SlideMenu,
menu.paint(g),
menu.slideItem(1);
menu.slideItem(-1);
当等待
正在进行时,将无法运行
顺便说一句,如果您在每行代码的开头使用四个空格(而不是
),您也可以获得漂亮的语法着色效果。如果您只是在编辑器中标记整个代码位并使用CTRLK,它将自动为您完成这项工作
synchronized (xyz) {
// Work your magic here.
}
而且,就您的更新而言,SlideMenu(图片打开)似乎是一个菜单,其中一个项目显示在屏幕上,左/右箭头允许您滚动:
+---------+
| |
/ | | \
< | image | >
\ | | /
| |
+---------+
+---------+
| |
/ | | \
<|图像|>
\ | | /
| |
+---------+
(请原谅我可怜的图形能力,我会把它留在那里,以防下面的链接消失)
毫无疑问,IconsCanvas
中的图像显示了要显示的菜单项。考虑到这一点,其他事情是有意义的
,我已经描述过了SlideMenu
被调用以显示新菜单,以响应menu.paint(g)
获取绘制请求IconsCanvas
根据参数左右滑动菜单menu.SlideItem()
- 如果图像实际上平滑地向左或向右滚动,那么100毫秒现在就更有意义了
synchronized
块上,作者的意图是等待/睡眠以便进行协作并让其他线程运行,而wait()必须始终是同步的。但不需要排队等待如此多的重新绘制,因为没有真正的动画,只需在前进到下一个/上一个时显示静态幻灯片(图像);画布在显示新幻灯片(或来电等)之前不会失效,这意味着只有在显示新幻灯片时才可以重新绘制。请注意,如果需要“平滑滚动”,则这种效果应通过SlideMenu
本身实现,它还必须考虑重新绘制()调度(与IconCanvas
相比)
其他意见:
- 在
幻灯片上
——需要查看它的实现
- 在
菜单上。绘制(g)
——它授权幻灯片菜单本身绘制/刷新当前幻灯片
- 在
菜单上,滑动项(1)代码>/菜单。滑动项(-1)代码>--不看幻灯片,它似乎是下一个/上一个导航机制
- 应考虑制作<代码> ICONVAux和<代码> SlideMenu < /C>单身>
感谢pax的响应,但我怀疑y wait(100L)是否与in synchronized(this)放在一起,如果不是这样会发生什么?这意味着使用sych(this)
的任何其他线程(其中为该组件)都将等待,直到该线程停止等待。它看起来像是一种争用控制。我会更新我的答案。帕克斯,我已经更新了代码,如果你能找到代码的流程,请给我回复