⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 errordialog.java

📁 一个很好的LIBSVM的JAVA源码。对于要研究和改进SVM算法的学者。可以参考。来自数据挖掘工具YALE工具包。
💻 JAVA
字号:
/*
 *  YALE - Yet Another Learning Environment
 *  Copyright (C) 2001-2004
 *      Simon Fischer, Ralf Klinkenberg, Ingo Mierswa, 
 *          Katharina Morik, Oliver Ritthoff
 *      Artificial Intelligence Unit
 *      Computer Science Department
 *      University of Dortmund
 *      44221 Dortmund,  Germany
 *  email: yale-team@lists.sourceforge.net
 *  web:   http://yale.cs.uni-dortmund.de/
 *
 *  This program is free software; you can redistribute it and/or
 *  modify it under the terms of the GNU General Public License as 
 *  published by the Free Software Foundation; either version 2 of the
 *  License, or (at your option) any later version. 
 *
 *  This program is distributed in the hope that it will be useful, but
 *  WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 *  General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program; if not, write to the Free Software
 *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
 *  USA.
 */
package edu.udo.cs.yale.gui;

import edu.udo.cs.yale.operator.UserError;
import edu.udo.cs.yale.tools.Tools;
import edu.udo.cs.yale.tools.XMLException;

import javax.swing.*;
import javax.swing.event.*;
import java.awt.*;
import java.awt.event.*;

/** Error message dialog.
 *
 *  @version $Id: ErrorDialog.java,v 2.8 2004/08/27 11:57:33 ingomierswa Exp $
 */
public class ErrorDialog extends JDialog {

    JButton editButton = new JButton("Edit");

    private class FormattedStackTraceElement {
	private StackTraceElement ste;
	private FormattedStackTraceElement(StackTraceElement ste) {
	    this.ste = ste;
	}
	public String toString() { return "  "+ste; }
    }

    private class StackTraceList extends JList {
	public StackTraceList(Throwable t) {
	    super(new DefaultListModel());
	    setFont(getFont().deriveFont(Font.PLAIN));
	    setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
	    appendAllStackTraces(t);
	    addListSelectionListener(new ListSelectionListener() {
		    public void valueChanged(ListSelectionEvent e) {
			if (getSelectedIndex() >= 0) {
			    if (!(getSelectedValue() instanceof FormattedStackTraceElement)) {
				editButton.setEnabled(false);
			    } else {
				editButton.setEnabled(true);
			    }
			} else {
			    editButton.setEnabled(true);
			}
		    }
		});
	}
	private DefaultListModel model() {
	    return (DefaultListModel)getModel();
	}

	private void appendAllStackTraces(Throwable throwable) {
	    while (throwable != null) {
		appendStackTrace(throwable);
		throwable = throwable.getCause();
		if (throwable != null) {
		    model().addElement("");
		    model().addElement("Cause");
		}
	    }
	}
	
	private void appendStackTrace(Throwable throwable) {
	    model().addElement("Exception: "+ throwable.getClass().getName());
	    model().addElement("Message: "+throwable.getMessage());
	    model().addElement("Stack trace:\n");
	    for (int i = 0; i < throwable.getStackTrace().length; i++) {
		model().addElement(new FormattedStackTraceElement(throwable.getStackTrace()[i]));
	    }		    
	}

	private void edit() {
	    try {
		Object o = getSelectedValue();
		if (o == null) return;
		if (!(o instanceof FormattedStackTraceElement)) return;
		StackTraceElement ste = ((FormattedStackTraceElement)o).ste;
		java.io.File file = Tools.findSourceFile(ste);
		if (file != null) Tools.launchFileEditor(file, ste.getLineNumber());
	    } catch (Throwable t) {
		SwingTools.showSimpleErrorMessage("Cannot launch editor.", t);
	    }
	}
    }

    private ErrorDialog(String title,
			String mainText,
			final Throwable error,
			boolean bugReport) {
	super(YaleGUI.getMainFrame(), title);

	final JPanel box = new JPanel();
	final GridBagLayout gbl = new GridBagLayout();
	box.setLayout(gbl);
	final GridBagConstraints c = new GridBagConstraints();
	c.fill      = c.BOTH;
	c.gridwidth = c.REMAINDER;
	c.weightx   = 1.0;
	c.weighty   = 0.0;
	c.insets    = new Insets(5,11,5,11);
	
	// message
  	JLabel text = new JLabel(mainText);
  	text.setFont(text.getFont().deriveFont(java.awt.Font.PLAIN));
	text.setPreferredSize(new Dimension(YaleGUI.getMainFrame().getWidth()*2/3, YaleGUI.getMainFrame().getHeight()/4));
	gbl.setConstraints(text, c);
	box.add(text);
	
	// details
	final Box detailBox = new Box(BoxLayout.Y_AXIS);
	final StackTraceList stl = new StackTraceList(error);
	JScrollPane detailPane = new JScrollPane(stl);
	detailPane.setPreferredSize(new Dimension(YaleGUI.getMainFrame().getWidth()*2/3, YaleGUI.getMainFrame().getHeight()/4));
	detailBox.add(detailPane);
	editButton.setEnabled(false);
	editButton.addActionListener(new ActionListener() {
		public void actionPerformed(ActionEvent e) {
		    stl.edit();
		}
	    });
	JPanel detailButtonPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT));
	detailButtonPanel.add(editButton);
	detailBox.add(detailButtonPanel);
	
	JPanel buttonPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT));
	final JButton detailButton = new JButton() {
		private boolean more = true;
		// anonymous class constructor
		{
		    setText("Details >>"); 
		    addActionListener(new ActionListener() {
			    public void actionPerformed(ActionEvent e) {
				if (more) {
				    c.weighty   = 1.0;
				    gbl.setConstraints(detailBox, c);
				    box.add(detailBox, 1);
				    setText("<< Hide");
				} else {
				    box.remove(detailBox);
				    setText("Details >>");
				}
				pack();
				more = !more;
			    }
			});
		}
	    };
	buttonPanel.add(detailButton);

	if (bugReport) {
	    JButton report = new JButton("Send bug report...");
	    report.addActionListener(new ActionListener() {
		    public void actionPerformed(ActionEvent e) {
			new BugAssistant(error).show();
		    }
		});
	    buttonPanel.add(report);
	}

	JButton close = new JButton("Close");
	close.addActionListener(new ActionListener() {
		public void actionPerformed(ActionEvent e) {
		    dispose();
		}
	    });
	buttonPanel.add(close);
	c.weighty   = 0.0;
	gbl.setConstraints(buttonPanel, c);
	box.add(buttonPanel);
	getContentPane().add(box);
	pack();
    }

    public static ErrorDialog create(String message, Throwable t) {
	if (t instanceof UserError) {
	    UserError ue = (UserError)t;
	    return new ErrorDialog("Error "+ue.getCode()+": "+ue.getErrorName(),
				   "<html>Error in: <b>"+ue.getOperator()+"</b><br>"+
				   Tools.escapeHTML(ue.getMessage())+"<hr>"+
				   Tools.escapeHTML(ue.getDetails())+"</html>",
				   t, false);
	} else {
	    return new ErrorDialog("Exception occured", 
				   "<html><b>"+Tools.classNameWOPackage(t.getClass())+"</b><br>"+
				   Tools.escapeHTML(message) + "<br>"+
				   "Message: "+Tools.escapeHTML(t.getMessage())+"</html>",
				   t, !(t instanceof XMLException));
	}
    }

    private static void appendAllStackTraces(JTextArea text, Throwable throwable) {
	while (throwable != null) {
	    appendStackTrace(text, throwable);
	    throwable = throwable.getCause();
	    if (throwable != null)
		text.append("\nCause:\n");
	}
    }

    private static void appendStackTrace(JTextArea text, Throwable throwable) {
	text.append("Exception:\t"+ throwable.getClass().getName()+"\n");
	text.append("Message:\t"+throwable.getMessage()+"\n");
	text.append("Stack trace:\n");
	for (int i = 0; i < throwable.getStackTrace().length; i++) {
	    text.append("  "+throwable.getStackTrace()[i]+"\n");
	}		    
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -