异常信息如下:
UIDefaults.getUI() failed: no ComponentUI class for: senvid.webTop.client.gui3.senvidUIPrimitives.SVStyleMenu[,0,0,0x0,invalid,alignmentX=null,alignmentY=null,border=,flags=0,maximumSize=,minimumSize=,preferredSize=,defaultIcon=,disabledIcon=,disabledSelectedIcon=,margin=null,paintBorder=false,paintFocus=false,pressedIcon=,rolloverEnabled=false,rolloverIcon=,rolloverSelectedIcon=,selectedIcon=,text=<HTML><BODY ></BODY></HTML>]java.lang.Error at javax.swing.UIDefaults.getUIError(Unknown Source) at javax.swing.UIDefaults.getUI(Unknown Source) at javax.swing.UIManager.getUI(Unknown Source) at javax.swing.JMenu.updateUI(Unknown Source) at javax.swing.JMenuItem.init(Unknown Source) at javax.swing.JMenuItem.<init>(Unknown Source) at javax.swing.JMenuItem.<init>(Unknown Source) at javax.swing.JMenu.<init>(Unknown Source) at javax.swing.JMenu.<init>(Unknown Source) at senvid.webTop.client.gui3.senvidUIPrimitives.SVStyleMenu.<init>(SVStyleMenu.java:67) at senvid.webTop.device.video.VideoComponent.addPopupMenu(VideoComponent.java:100) at senvid.webTop.device.video.VideoComponent.<init>(VideoComponent.java:62) at senvid.webTop.device.video.VideoClient.<init>(VideoClient.java:62) at senvid.webTop.client.apps.applet.MioNetApplet.openVideoDevice(MioNetApplet.java:569) at senvid.webTop.client.apps.applet.MioNetApplet$DeviceOpener.run(MioNetApplet.java:301) at edu.emory.mathcs.backport.java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:442) at edu.emory.mathcs.backport.java.util.concurrent.FutureTask.run(FutureTask.java:178) at edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1061) at edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:575) at java.lang.Thread.run(Unknown Source)请高手指点,马上给分
UIDefaults.getUI() failed: no ComponentUI class for: senvid.webTop.client.gui3.senvidUIPrimitives.SVStyleMenu[,0,0,0x0,invalid,alignmentX=null,alignmentY=null,border=,flags=0,maximumSize=,minimumSize=,preferredSize=,defaultIcon=,disabledIcon=,disabledSelectedIcon=,margin=null,paintBorder=false,paintFocus=false,pressedIcon=,rolloverEnabled=false,rolloverIcon=,rolloverSelectedIcon=,selectedIcon=,text=<HTML><BODY ></BODY></HTML>]java.lang.Error at javax.swing.UIDefaults.getUIError(Unknown Source) at javax.swing.UIDefaults.getUI(Unknown Source) at javax.swing.UIManager.getUI(Unknown Source) at javax.swing.JMenu.updateUI(Unknown Source) at javax.swing.JMenuItem.init(Unknown Source) at javax.swing.JMenuItem.<init>(Unknown Source) at javax.swing.JMenuItem.<init>(Unknown Source) at javax.swing.JMenu.<init>(Unknown Source) at javax.swing.JMenu.<init>(Unknown Source) at senvid.webTop.client.gui3.senvidUIPrimitives.SVStyleMenu.<init>(SVStyleMenu.java:67) at senvid.webTop.device.video.VideoComponent.addPopupMenu(VideoComponent.java:100) at senvid.webTop.device.video.VideoComponent.<init>(VideoComponent.java:62) at senvid.webTop.device.video.VideoClient.<init>(VideoClient.java:62) at senvid.webTop.client.apps.applet.MioNetApplet.openVideoDevice(MioNetApplet.java:569) at senvid.webTop.client.apps.applet.MioNetApplet$DeviceOpener.run(MioNetApplet.java:301) at edu.emory.mathcs.backport.java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:442) at edu.emory.mathcs.backport.java.util.concurrent.FutureTask.run(FutureTask.java:178) at edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1061) at edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:575) at java.lang.Thread.run(Unknown Source)请高手指点,马上给分
if(uiClass==null)
{
getUIError("no componentUI class for:"+target);
} 也就是在反射时找不到你的组件的UI,想知道你定义的组件都做了些什么?
{
...}
JMenu构造函数的参数不能为空吧
com\sun\java\swing\plaf\windows\javax\swing\plaf\metal\看看你用的什么观感,看异常是PopupMenuUI有问题
MotifMenuUI,WindowsMenuUI
没有
MetalMenuUI
{
private boolean ignoreUserInput;
private boolean mouseInside;
private static final String uiClassID = "SVStyleBasicMenuUI"; private void setHilightEffect(boolean hilight)
{
if (hilight)
{
setOpaque(true); setForeground(Color.WHITE);
setBackground(SVStyle.getColor(SVStyle.COLOR_LIST_SELECTION_HILIGHT));
}
else
{
//setOpaque(false);
setBackground(Color.WHITE);
setForeground(SVStyle.getColor(SVStyle.COLOR_35_MENU_TEXT));//Color.BLACK);
}
}
public void menuSelectionChanged(boolean isIncluded)
{
if (!isIncluded)
if (mouseInside)
setHilightEffect(true);
else
setHilightEffect(false); super.menuSelectionChanged(isIncluded); //To change body of overridden methods use File | Settings | File Templates.
} public void setPopupMenuVisible(boolean b)
{
super.setPopupMenuVisible(b);
}
public SVStyleMenu(SVStringID stringID, int fontID, JComponent parent)
{//line 67 运行到这里开始报错
mouseInside = false;
ignoreUserInput = false;
enableEvents(AWTEvent.WINDOW_EVENT_MASK); getPopupMenu().addPopupMenuListener(this); setText(SVStringTable.getString(stringID).getString());
setFont(SVStyle.getFont(fontID)); if (parent != null)
parent.add(this);
}
public SVStyleMenu(SVStringID stringID, int fontID, int iconID, JComponent parent)
{
mouseInside = false;
ignoreUserInput = false;
enableEvents(AWTEvent.WINDOW_EVENT_MASK); getPopupMenu().addPopupMenuListener(this); setText(SVStringTable.getString(stringID).getString());
setFont(SVStyle.getFont(fontID));
setIcon(ImageLoader.getImageIcon(iconID)); if (parent != null)
parent.add(this);
}
protected boolean processKeyBinding(KeyStroke ks, KeyEvent e, int condition, boolean pressed)
{
if (ignoreUserInput)
return true;
else
return super.processKeyBinding(ks, e, condition, pressed);
}
protected void processMouseEvent(MouseEvent e)
{
if (e.getID() == MouseEvent.MOUSE_ENTERED)
{
setHilightEffect(true);
mouseInside = true;
}
else if (e.getID() == MouseEvent.MOUSE_EXITED)
{
setOpaque(false); mouseInside = false;
if (!isPopupMenuVisible())
setForeground(SVStyle.getColor(SVStyle.COLOR_35_MENU_TEXT));//Color.BLACK);
} if (ignoreUserInput)
{
return;
}
else
{
//synchronized(TheApp.theAppSingleton)
{
super.processMouseEvent(e);
}
}
}
public boolean isIgnoreUserInput()
{
return ignoreUserInput;
}
public void setIgnoreUserInput(boolean ignoreUserInputIn)
{
ignoreUserInput = ignoreUserInputIn;
}
public void setText(String text)
{
String title = text;
if ((text != null) && (text.length() > 6) && (text.substring(0,6).equals(MioNetConstants.TAG_HTML_OPEN)))
title = SVStyle.internationalizeText(text, false, false);
else if (text == null)
title = null;
else
title = SVStyle.internationalizeText(text, true, false);
/* if(title != null){
String fontAndStyleTagOpen = "<FONT style=\"";
String fontAndStyleTagClose = "</FONT>";
int iStart = title.indexOf("BODY >");
if(iStart>-1){
String beg = title.substring(0, iStart+6);
beg = beg+fontAndStyleTagOpen+"color: #"+SVStyle.getColorAsHexString(SVStyle.COLOR_35_MENU_TEXT)+";";
String newTitle = beg + "\">" + title.substring(iStart+6);
title = newTitle;
} title += fontAndStyleTagClose; }*/
// System.out.println(title);
super.setText(title);
}
public void setToolTipText(String text)
{
if ((text != null) && (text.length() > 6) && (text.substring(0,6).equals(MioNetConstants.TAG_HTML_OPEN)))
super.setToolTipText(SVStyle.internationalizeText(text, false, false));
else if (text == null)
super.setToolTipText(null);
else
super.setToolTipText(SVStyle.internationalizeText(text, true, false));
}
public void popupMenuCanceled(PopupMenuEvent e)
{
setForeground(SVStyle.getColor(SVStyle.COLOR_LIST_SELECTION_HILIGHT));
}
public void popupMenuWillBecomeInvisible(PopupMenuEvent e)
{
setForeground(SVStyle.getColor(SVStyle.COLOR_LIST_SELECTION_HILIGHT));
}
public void popupMenuWillBecomeVisible(PopupMenuEvent e)
{
setHilightEffect(true);
}
}
UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
很奇怪
JMenuItem jm=new JMenuItem("test");//没有错误JMenu jm=new JMenu("test");//出错,信息如下
UIDefaults.getUI() failed: no ComponentUI class for: javax.swing.JMenu[,0,0,0x0,invalid,alignmentX=null,alignmentY=null,border=,flags=0,maximumSize=,minimumSize=,preferredSize=,defaultIcon=,disabledIcon=,disabledSelectedIcon=,margin=null,paintBorder=false,paintFocus=false,pressedIcon=,rolloverEnabled=false,rolloverIcon=,rolloverSelectedIcon=,selectedIcon=,text=]java.lang.Error at javax.swing.UIDefaults.getUIError(Unknown Source) at javax.swing.UIDefaults.getUI(Unknown Source) at javax.swing.UIManager.getUI(Unknown Source) at javax.swing.JMenu.updateUI(Unknown Source) at javax.swing.JMenuItem.init(Unknown Source) at javax.swing.JMenuItem.<init>(Unknown Source) at javax.swing.JMenuItem.<init>(Unknown Source) at javax.swing.JMenu.<init>(Unknown Source) at javax.swing.JMenu.<init>(Unknown Source) at senvid.webTop.device.video.VideoComponent.addPopupMenu(VideoComponent.java:99) at senvid.webTop.device.video.VideoComponent.<init>(VideoComponent.java:63) at senvid.webTop.device.video.VideoClient.<init>(VideoClient.java:62) at senvid.webTop.client.apps.applet.MioNetApplet.openVideoDevice(MioNetApplet.java:570) at senvid.webTop.client.apps.applet.MioNetApplet$DeviceOpener.run(MioNetApplet.java:302) at edu.emory.mathcs.backport.java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:442) at edu.emory.mathcs.backport.java.util.concurrent.FutureTask.run(FutureTask.java:178) at edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1061) at edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:575) at java.lang.Thread.run(Unknown Source)
private static final String uiClassID = "SVStyleBasicMenuUI";
return uiClassID; SVStyleBasicMenuUI
}把这个去掉了吧
UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
指定组件的外观吗?我试试看一下
加上这句话还是不行
UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel"); JMenuItem jm=new JMenuItem("test");//没有错误 JMenu jm1=new JMenu("test");//出错
这两个类有什么差别呢?为什么会报错啊
加上这句话还是不行
UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel"); JMenuItem jm=new JMenuItem("test");//没有错误 JMenu jm1=new JMenu("test");//出错
这两个类有什么差别呢?为什么会报错啊
SVStyleBasicMenuUI.java
不知道怎么关联public class SVStyleBasicMenuUI extends BasicMenuUI {
public static ComponentUI createUI(JComponent x) {
return new SVStyleBasicMenuUI();
}
protected void installDefaults() {
super.installDefaults();
selectionBackground = SVStyle.getColor(SVStyle.COLOR_35_MENU_SELECTION_BACKGROUND);
}
protected void paintBackground(Graphics g, JMenuItem menuItem, Color bgColor) {
ButtonModel model = menuItem.getModel();
Color oldColor = g.getColor();
int menuWidth = menuItem.getWidth();
int menuHeight = menuItem.getHeight();
Graphics2D g2D = (Graphics2D)g;
if(menuItem.isOpaque()) {
if (model.isArmed()|| (menuItem instanceof JMenu && model.isSelected())) {
g.setColor(selectionBackground);
g.fillRect(0,0, menuWidth, menuHeight);
menuItem.setForeground(Color.white);
} else {
if(isMouseOver && model.isEnabled()){
g.setColor(selectionBackground);
g.fillRect(0,0, menuWidth, menuHeight);
menuItem.setForeground(Color.white);
}
else{
GradientPaint gp1 = new GradientPaint(new Point(0,0), SVStyle.getColor(SVStyle.COLOR_35_MENUBAR_BACKGROUND_TOP),
new Point(0,menuHeight),SVStyle.getColor(SVStyle.COLOR_35_MENUBAR_BACKGROUND_BOTTOM));
g2D.setPaint(gp1);
g2D.fill(new Rectangle(0,0, menuWidth, menuHeight));
menuItem.setForeground(SVStyle.getColor(SVStyle.COLOR_35_MENU_TEXT));
}
}
g.setColor(oldColor);
}
}
protected MouseInputListener createMouseInputListener(JComponent c) {
return new SVMouseInputHandler();
}
protected class SVMouseInputHandler extends MouseInputHandler{
public void mouseEntered(MouseEvent e) {
super.mouseEntered(e);
isMouseOver = true;
}
public void mouseExited(MouseEvent e) {
isMouseOver = false;
}
}
boolean isMouseOver = false;
}
private SVStyleBasicMenuUI menuItemUI; public void updateUI()
{
super.updateUI();
menuItemUI = new SVStyleBasicMenuUI();
setUI(menuItemUI);
}