在Java GUI应用程序中调试用户事件

时间:2012-07-05 12:47:53

标签: java swing java-ee

我正在使用Java Project,它提供了用于执行某些用户事件的用户界面。它不像在大多数Swing / Gui应用程序中那样在main()中作为Runnable线程执行。相反,它在源代码中有几个类和表单文件,并使用另一个Java程序从命令行运行。 但是当我尝试通过单击某个输入按钮来读取某个文件时,系统无法读取该文件。系统将自定义错误消息写入保存在项目文件夹中的名为log.txt的文件中。 我试过了 1.设置断点(应用程序不会在断点处停止) 2.进行控制台打印,即System.out.println(控制台上没有打印)

因此两种调试方式都失败了。我正在使用Eclipse 3.5.2 SDK(Galileo)。如何在我的应用程序中调试用户事件?

下面列出了项目DDMT中的源类DataImportPanel的大纲。它在DataImportPanel.openHeteroFile(File)方法中给出了一个例外。

DDMT.core.DataImportPanel 
... 
DDMT.core.DataImportPanel.heteroDistributionModel 
...  
DDMT.core.DataImportPanel.initComponents() 
DDMT.core.DataImportPanel.initComponents().new ActionListener() {...} 
...
DDMT.core.DataImportPanel.initComponents().new MouseAdapter() {...} 
DDMT.core.DataImportPanel.initComponents().new ActionListener() {...} 
DDMT.core.DataImportPanel.jButton2ActionPerformed(ActionEvent) 
... 
DDMT.core.DataImportPanel.jButton3ActionPerformed(ActionEvent) 
DDMT.core.DataImportPanel.openHeteroFile(File) 
DDMT.core.DataImportPanel.jButton8ActionPerformed(ActionEvent)  
DDMT.core.DataImportPanel.openFile(File) 
DDMT.core.DataImportPanel.jButton15ActionPerformed(ActionEvent) 
DDMT.core.DataImportPanel.jRadioButton1ActionPerformed(ActionEvent)  
DDMT.core.DataImportPanel.buttonGroup1  
...
DDMT.core.DataImportPanel.jButton8 
DDMT.core.DataImportPanel.jButton9 
DDMT.core.DataImportPanel.jLabel1 
... 
DDMT.core.DataImportPanel.jList1 
... 
DDMT.core.DataImportPanel.jPanel1 
... 
DDMT.core.DataImportPanel.jRadioButton1 
...
DDMT.core.DataImportPanel.jScrollPane1 
... 
DDMT.core.DataImportPanel.jTabbedPane1 
DDMT.core.DataImportPanel.DistributionTypes 
DDMT.core.DataImportPanel.DoubleCellRenderer

这是抛出数据导入异常的openHeteroFile

private void openHeteroFile(File f)
{
    File file = null;
    try{
        file = f;
        file.createNewFile();
        FileReader reader = new FileReader(file);
        BufferedReader bReader = new BufferedReader(reader);

        //The vector that holds the number of columns
        attributeNames = new ArrayList<String>();

        //Read in the number of pairs
        String line = bReader.readLine();

        //load the file
        heteroDistributionModel = new DefaultListModel();
        line = bReader.readLine();
        while( line != null )
        {
            //Set up the RegEx matches
            heteroDistM = heteroDistP.matcher(line);
            firstM = firstP.matcher(line);
            firstM.find();
            String output1 = firstM.group()+" (";
            for( int j = 0; j< nodeTypes[0].length; j++)
            {
                if( controlClass.nodes[Integer.parseInt(firstM.group())].getNodeType().equals( nodeTypes[1][j]) )
                {
                    output1 = output1+nodeTypes[0][j]+")";
                }
            }
            String output2 = new String();
            while( heteroDistM.find() )
            {
                attributeNames.add(heteroDistM.group(1));
                output2 = output2 + " "+heteroDistM.group(1);
            }
            heteroDistributionModel.addElement(new String[]{output1, output2});
            line = bReader.readLine();
        }

        for (String attr : attributeNames) 
            System.out.println(attr); //debug


        jList3.setModel(heteroDistributionModel);
        jList3.setCellRenderer(new DoubleCellRenderer());
        bReader.close();
        reader.close();
    }catch(IOException ex)
    {
        controlClass.showError("Data Import: Error: File "+file.getPath()+" is not a valid Heterogeneous data file!");
    }catch(Exception ex)
    {
        ex.printStackTrace(); //debug
        controlClass.showError("Data Import: Error: Unknown problem reading file "+file.getPath()+"!");
    }
}

1 个答案:

答案 0 :(得分:1)

启动调试器的运行按钮旁边有一个小绿瓢虫。

我会确保正确拨打电话。还要检查括号,中断和返回以确保实际读取代码。请发布SSCCE(简短,自包含,正确的示例),以便我们查看您的代码以更好地帮助您。

编辑(在OP添加一些代码之后)

我很确定您的问题出在file.createNewFile();

的位置