作业帮 > 综合 > 作业

开机桌面显示failed to create tray

来源:学生作业帮 编辑:拍题作业网作业帮 分类:综合作业 时间:2024/04/27 14:27:02
开机桌面显示failed to create tray
问题是怎么造成的?会有什么严重的后果吗?不要用太多专业的术语,我看不懂,能提供处理方法就更好了.托盘图标是什么?托盘图标都在呀,也还能用,是不是某一项任务的托盘图标没有创建成功?
:未能创建托盘图标
系统托盘
系统托盘是个特殊区域,通常在桌面的底部,在那里,用户可以随时访问正在运行中的那些程序.在微软的Windows里,系统托盘常指任务栏的状态区域;在Gnome的桌面时,常指布告栏区域;在KDE桌面时,指系统托盘.在每个系统里,托盘是所有正运行在桌面环境里
的应用程序共享的区域.
访问系统托盘
类java.awt.SystemTray代表了桌面上的系统托盘.通过调用静态方法SystemTray.getSystemTray()来访问系统托盘.然后,在调用此方法前,应该用静态方法SystemTray.isSupported()来检测系统托盘是否可被支持.如果操作系统上系统托盘还未准备就绪或者不被支持,那么方法
isSupported()返回false.此时,应用程序如果试图调用方法 getSystemTray(),那么将抛出异常 java.lang.UnsupportedOperationException
每个Java应用程序有一个单一的SystemTray实例.因此,一个应用程序不应创建它本身的SystemTray实例,而是应通过调用方法getSystemTray()来获得当前可用的系统托盘.
系统托盘包含一个或多个托盘图标,这些图标是以调用方法add(java.awt.TrayIcon)添加的,当不需要这些图标的时候,通过调用方法remove(java.awt.TrayIcon)来剔除.
注意:Mustang新增加的代码库里指出,如果JAVA运行环境或操作系统发现不能把图标添加到系统托盘的时候,方法add()会抛出一个AWTException异常.例如,在X-WINDOWS桌面环境下,如果
系统托盘不存在,那么AWTException异常将抛出.
[编辑本段]方法
设置NOTIFYICONDATA型的结构体变量的成员变量的值:cbSize 该结构体的大小.hwnd 窗口的句柄.当鼠标滑过该小图标时,该窗口将接收到相关的消息.uID 小图标的ID号.您可以取任意值,只是当您的应用程序有不止一个小图标时,您要能够区分出到底是那一个小图标接收到了鼠标的消息,也即ID号必须唯一.uFlags 指定该结构体变量的那些成员变量有效.NIF_ICON 有效.NIF_MESSAGE 有效.NIF_TIP 有效.uCallbackMessage 自定义的消息.当鼠标对小图标动作时,WINDOWS外壳将把该消息发送到您的应用程序.该消息的值您可以自己定义.hIcon 放入系统托盘中的图标的句柄.szTip 64字节的缓冲区,它用来放入提示字符串,当鼠标停留在小图标上时,就会显示该字符串.调用Shell_NotifyIcon函数.该函数在shell32.inc中定义,其原型如下:
Shell_NotifyIcon PROTO dwMessage:DWORD ,pnid:DWORD dwMessage 是发送到WINDOWS外壳的消息:
NIM_ADD 把小图标加到系统托盘区.
NIM_DELETE 从系统托盘中删除小图标.
NIM_MODIFY 修改小图标.
pnid 是指向NOTIFYICONDATA型结构体变量的指针.
如果您想要加入一个小图标就用NIM_ADD,删除时使用NIM_DELETE消息.
基本上的消息就是这些.但是大多数的情况下,您不会仅仅满足把一个小图标放到那里.您还必须要对鼠标事件作出适当的反应.您可以在NOTIFYICONDATA型的结构体变量的成员变量uCallbackMessage 中设置您要处理的消息,然后WINDOWS外壳将在发生这些事件时通知您的应用程序.随着消息传送的参数wParam和lParam的值如下:
wParam 小图标的ID号.它和您在NOTIFYICONDATA型结构体变量中的成员变量uID中设置的值一样.lParam 低字包含鼠标消息.譬如,用户在小图标上按下了右键时,lParam中将包含WM_RBUTTONDOWN消息.大多数的系统托盘中的小图标,在用户用鼠标右击时都会弹出一个菜单以方便用户选择.我们可先创建菜单,然后调用TrackPopupMenu函数来显示它.步骤如下:
调用CreatePopupMenu函数来创建菜单.该函数创建一个空的菜单.如果成功,将在eax中返回该菜单的句柄.调用AppendMenu,InsertMenu 或 InsertMenuItem来向菜单中加入菜单项.当您想在当前鼠标位置显示该菜单时,调用GetCursorPosition函数来得到鼠标当前的屏幕位置,然后调用TrackPopupMenu来显示菜单.当用户从弹出式菜单中选择了一个菜单项时,WINDOWS将发送WM_COMMAND消息给您应用程序的消息处理过程,这和通常的菜单选择是一样的..注意:当您使用系统托盘中的小图标时有两件比较讨厌的事:
该菜单可能不会像通常那样马上消失掉.这是因为从弹出式接收消息的窗口必须是前景窗口.调用SetForegroundWindow函数就可以纠正该错误; 在调用了SetForegroundWindow函数后,您会发现第一次该弹出式菜单会正常弹出而且工作的很好.但是随后,该菜单只是一弹出就立即消失.根据MSDN,这么做是故意的.为了使得弹出菜单保持住,必须要求下一个切换到的是程序的主窗口.您可以通过邮寄任何消息给该程序的窗口来强行进行任务切换.注意要使用PostMessage而不是SendMessage.