256 lines · 10.5 KB · Java
RawDownload
/* * Copyright (c) 1998, 1999, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation.  Oracle designates this * particular file as subject to the "Classpath" exception as provided * by Oracle in the LICENSE file that accompanied this code. * * This code 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 * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions. */ package com.sun.tools.example.debug.gui; import java.io.*;import javax.swing.*;import javax.swing.border.*;import java.awt.*;import java.awt.event.*; import com.sun.jdi.*;import com.sun.tools.example.debug.bdi.*; public class GUI extends JPanel {     private static final long serialVersionUID = 3292463234530679091L;    private CommandTool cmdTool;    private ApplicationTool appTool;    //###HACK##    //### There is currently dirty code in Environment that    //### accesses this directly.    //private SourceTool srcTool;    public static SourceTool srcTool;     private SourceTreeTool sourceTreeTool;    private ClassTreeTool classTreeTool;    private ThreadTreeTool threadTreeTool;    private StackTraceTool stackTool;    private MonitorTool monitorTool;     public static final String progname = "javadt";    public static final String version = "1.0Beta";  //### FIX ME.    public static final String windowBanner = "Java(tm) platform Debug Tool";     private Font fixedFont = new Font("monospaced", Font.PLAIN, 10);     private GUI(Environment env) {        setLayout(new BorderLayout());         setBorder(new EmptyBorder(5, 5, 5, 5));         add(new JDBToolBar(env), BorderLayout.NORTH);         srcTool = new SourceTool(env);        srcTool.setPreferredSize(new java.awt.Dimension(500, 300));        srcTool.setTextFont(fixedFont);         stackTool = new StackTraceTool(env);        stackTool.setPreferredSize(new java.awt.Dimension(500, 100));         monitorTool = new MonitorTool(env);        monitorTool.setPreferredSize(new java.awt.Dimension(500, 50));         JSplitPane right = new JSplitPane(JSplitPane.VERTICAL_SPLIT, srcTool,            new JSplitPane(JSplitPane.VERTICAL_SPLIT, stackTool, monitorTool));         sourceTreeTool = new SourceTreeTool(env);        sourceTreeTool.setPreferredSize(new java.awt.Dimension(200, 450));         classTreeTool = new ClassTreeTool(env);        classTreeTool.setPreferredSize(new java.awt.Dimension(200, 450));         threadTreeTool = new ThreadTreeTool(env);        threadTreeTool.setPreferredSize(new java.awt.Dimension(200, 450));         JTabbedPane treePane = new JTabbedPane(SwingConstants.BOTTOM);        treePane.addTab("Source", null, sourceTreeTool);        treePane.addTab("Classes", null, classTreeTool);        treePane.addTab("Threads", null, threadTreeTool);         JSplitPane centerTop = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, treePane, right);         cmdTool = new CommandTool(env);        cmdTool.setPreferredSize(new java.awt.Dimension(700, 150));         appTool = new ApplicationTool(env);        appTool.setPreferredSize(new java.awt.Dimension(700, 200));         JSplitPane centerBottom = new JSplitPane(JSplitPane.VERTICAL_SPLIT, cmdTool, appTool);        //        centerBottom.setPreferredSize(new java.awt.Dimension(700, 350));         JSplitPane center = new JSplitPane(JSplitPane.VERTICAL_SPLIT, centerTop, centerBottom);         add(center, BorderLayout.CENTER);      }     private static void usage() {        String separator = File.pathSeparator;        System.out.println("Usage: " + progname + " <options> <class> <arguments>");        System.out.println();        System.out.println("where options include:");        System.out.println("    -help             print out this message and exit");        System.out.println("    -sourcepath <directories separated by \"" +                           separator + "\">");        System.out.println("                      list directories in which to look for source files");        System.out.println("    -remote <hostname>:<port-number>");        System.out.println("                      host machine and port number of interpreter to attach to");        System.out.println("    -dbgtrace [flags] print info for debugging " + progname);        System.out.println();        System.out.println("options forwarded to debuggee process:");        System.out.println("    -v -verbose[:class|gc|jni]");        System.out.println("                      turn on verbose mode");        System.out.println("    -D<name>=<value>  set a system property");        System.out.println("    -classpath <directories separated by \"" +                           separator + "\">");        System.out.println("                      list directories in which to look for classes");        System.out.println("    -X<option>        non-standard debuggee VM option");        System.out.println();        System.out.println("<class> is the name of the class to begin debugging");        System.out.println("<arguments> are the arguments passed to the main() method of <class>");        System.out.println();        System.out.println("For command help type 'help' at " + progname + " prompt");    }     public static void main(String argv[]) {        String clsName = "";        String progArgs = "";        String javaArgs = "";        final Environment env = new Environment();         JPanel mainPanel = new GUI(env);         ContextManager context = env.getContextManager();        ExecutionManager runtime = env.getExecutionManager();         for (int i = 0; i < argv.length; i++) {            String token = argv[i];            if (token.equals("-dbgtrace")) {            if ((i == argv.length - 1) ||                ! Character.isDigit(argv[i+1].charAt(0))) {                runtime.setTraceMode(VirtualMachine.TRACE_ALL);            } else {                String flagStr = argv[++i];                runtime.setTraceMode(Integer.decode(flagStr).intValue());            }        } else if (token.equals("-X")) {                System.out.println(                       "Use 'java -X' to see the available non-standard options");                System.out.println();                usage();                System.exit(1);            } else if (                   // Standard VM options passed on                   token.equals("-v") || token.startsWith("-v:") ||  // -v[:...]                   token.startsWith("-verbose") ||                  // -verbose[:...]                   token.startsWith("-D") ||                   // NonStandard options passed on                   token.startsWith("-X") ||                   // Old-style options                   // (These should remain in place as long as the standard VM accepts them)                   token.equals("-noasyncgc") || token.equals("-prof") ||                   token.equals("-verify") || token.equals("-noverify") ||                   token.equals("-verifyremote") ||                   token.equals("-verbosegc") ||                   token.startsWith("-ms") || token.startsWith("-mx") ||                   token.startsWith("-ss") || token.startsWith("-oss") ) {                javaArgs += token + " ";            } else if (token.equals("-sourcepath")) {                if (i == (argv.length - 1)) {                    System.out.println("No sourcepath specified.");                    usage();                    System.exit(1);                }                env.getSourceManager().setSourcePath(new SearchPath(argv[++i]));            } else if (token.equals("-classpath")) {                if (i == (argv.length - 1)) {                    System.out.println("No classpath specified.");                    usage();                    System.exit(1);                }                env.getClassManager().setClassPath(new SearchPath(argv[++i]));            } else if (token.equals("-remote")) {                if (i == (argv.length - 1)) {                    System.out.println("No remote specified.");                    usage();                    System.exit(1);                }                env.getContextManager().setRemotePort(argv[++i]);            } else if (token.equals("-help")) {                usage();                System.exit(0);            } else if (token.equals("-version")) {                System.out.println(progname + " version " + version);                System.exit(0);            } else if (token.startsWith("-")) {                System.out.println("invalid option: " + token);                usage();                System.exit(1);            } else {                // Everything from here is part of the command line                clsName = token;                for (i++; i < argv.length; i++) {                    progArgs += argv[i] + " ";                }                break;            }        }         context.setMainClassName(clsName);        context.setProgramArguments(progArgs);        context.setVmArguments(javaArgs);         // Force Cross Platform L&F        try {            UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName());            // If you want the System L&F instead, comment out the above line and            // uncomment the following:            // UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());        } catch (Exception exc) {            System.err.println("Error loading L&F: " + exc);        }         JFrame frame = new JFrame();        frame.setBackground(Color.lightGray);        frame.setTitle(windowBanner);        frame.setJMenuBar(new JDBMenuBar(env));        frame.setContentPane(mainPanel);         frame.addWindowListener(new WindowAdapter() {            @Override            public void windowClosing(WindowEvent e) {                env.terminate();            }        });         frame.pack();        frame.setVisible(true);     } }