CrazyMan666 2011-06-27 22:10
浏览 215
已采纳

JAVA问题 一个类不知道哪里的问题 貌似出现了死循环了 大家帮忙看看吧?

package com.hao.player;

import java.awt.AWTException;
import java.awt.Image;
import java.awt.MenuItem;
import java.awt.PopupMenu;
import java.awt.SystemTray;
import java.awt.Toolkit;
import java.awt.TrayIcon;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class Start{

public static void main(String []args)
{
MySystemTray mst=MySystemTray.getInstance();
}
}
class MySystemTray implements ActionListener
{
private static MySystemTray instance = null;

private static PopupMenu popupMenu;//trayIcon的弹出菜单
public static TrayIcon trayIcon;//系统托盘的托盘图标
private static SystemTray systemTray;//创建系统托盘
private static MenuItem exit;//弹出菜单的项
private MySystemTray()
{
if(systemTray==null)
{
systemTray=SystemTray.getSystemTray();//得到一个系统托盘
}
Image image=Toolkit.getDefaultToolkit().getImage("picture.gif");
trayIcon=new TrayIcon(image, "双击弹出程序,右击弹出菜单");
trayIcon.setImageAutoSize(true);//使图片完全显示
try

{
systemTray.add(trayIcon);//增加系统托盘图标
} catch (AWTException e)

{
e.printStackTrace();
}
popupMenu=new PopupMenu();
trayIcon.setPopupMenu(popupMenu);
exit = new MenuItem("Exit", null);
popupMenu.add(exit);
trayIcon.addActionListener(new MySystemTray());
exit.addActionListener(new MySystemTray());
}
public static synchronized MySystemTray getInstance(){

if(instance==null)
{
instance=new MySystemTray();
}
return instance;
}
@Override
public void actionPerformed(ActionEvent e)

{
if(e.getSource()==exit)
{
systemTray.remove(trayIcon);
System.exit(0);
}else if(e.getSource()==trayIcon)
{
MainFrame mainFrame=new MainFrame();
mainFrame.showMusicList();
mainFrame.setAlwaysOnTop(true);
mainFrame.setVisible(true);

}

}
}
这段代码导致我的任务栏多了很多trayIcon=new TrayIcon(image, "双击弹出程序,右击弹出菜单");
很多托盘图标被创建了,为什么呢就像一个死循环!!!

  • 写回答

2条回答 默认 最新

  • fmjsjx 2011-06-28 09:09
    关注

    [quote][code="java"]
    private MySystemTray() {
    if (systemTray==null) {
    systemTray=SystemTray.getSystemTray();//得到一个系统托盘
    }
    Image image=Toolkit.getDefaultToolkit().getImage("picture.gif");
    trayIcon=new TrayIcon(image, "双击弹出程序,右击弹出菜单");
    trayIcon.setImageAutoSize(true);//使图片完全显示
    try {
    systemTray.add(trayIcon);//增加系统托盘图标
    } catch (AWTException e) {
    e.printStackTrace();
    }
    popupMenu=new PopupMenu();
    trayIcon.setPopupMenu(popupMenu);
    exit = new MenuItem("Exit", null);
    popupMenu.add(exit);
    trayIcon.addActionListener(new MySystemTray());
    exit.addActionListener(new MySystemTray());
    }
    [/code][/quote]
    最后两行不就递归调用了么?而且没有结束的分支,无限递归……

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥35 平滑拟合曲线该如何生成
  • ¥100 c语言,请帮蒟蒻写一个题的范例作参考
  • ¥15 名为“Product”的列已属于此 DataTable
  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 自己瞎改改,结果现在又运行不了了
  • ¥15 链式存储应该如何解决
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站