首页 > 解决方案 > 在 NETBeans IDE 中编译后,Java 可执行 .jar 文件无法正常工作

问题描述

我正在从 Netbeans IDE 中内置的 GUI 导出 .jar 文件。它在 Netbeans 中运行良好,但一旦导出,代码中的某些逻辑就无法正确执行。

我已经尝试通过运行测试用例来显示哪些项目正在通过 if 子句进行调试。它似乎在 IDE 中运行良好,但在通过 .jar 文件运行时却不行。

for(Chamber chamber: chs)
        {
            if(!scheduledTools.containsKey(chamber))//unscheduled chambers
                {
                    JOptionPane.showMessageDialog(this, chamber.getName()+": is unscheduled");
                    model.addElement(chamber.getName());
                }
            else//scheduled
            {
                if((scheduledTools.get(chamber).size()/range) > .25)
                {
                    System.out.println("Range: " +range+" Scheduled: " +scheduledTools.get(chamber).size());
                    System.out.println("Cannot use this chambers:" +chamber.getName());
                    JOptionPane.showMessageDialog(this, chamber.getName()+": Cannot use this chamber");
                }
                else{
                    System.out.println("Scheduled but can use"+chamber.getName());

                    altModel.addElement(chamber.getName());

                }
            }
        }

        alternateChambers.setModel(altModel);alternateChambers.setSelectedIndex(0);
        suggestedChambers.setModel(model);suggestedChambers.setSelectedIndex(0);

        if(altModel.size()>1){JOptionPane.showMessageDialog(this, "Scheduled but can use these chambers:"+altModel);}

在下面的 seekDates 方法中进行必要的查询后:

private void seekDates(ResultSet rs) throws SQLException
    {

        ArrayList<String> entries;

        //get how many dates we have so we can update progressbar
            int results = 0;

            setProgress(results);

            if(rs.last()){results=rs.getRow();rs.beforeFirst();}

        // processing returned data and printing into console
            while(rs.next()) {

                String scheduledChamber =  rs.getString(2);

                for(Chamber chamber : chambers){
                    //if the scheduled tool is a thermal chamber
                    //chambers get listed so far

                    if(!scheduledChamber.trim().toLowerCase().contains(chamber.getName().toLowerCase()))
                    {}//print chambers im not saving
                    else{
                        if(scheduledTools.containsKey(chamber))
                        {
                            //if key already used, just grab the list and add date
                            entries = scheduledTools.get(chamber);
                            entries.add(rs.getString(1).split(" ")[0]);

                        }
                        else
                        {
                            //if chamber hasnt been saved, add chamber and date
                            entries = new ArrayList<String>();
                            entries.add(rs.getString(1).split(" ")[0]);
                            scheduledTools.put(chamber, entries);

                        }

                    //System.out.println("Just saved this chamber:" +scheduledChamber+" with this date:" +scheduledTools.get(chamber));
                    }
                    ;

                }

                publish(rs.getRow());
                Thread.yield();

                setProgress(100*(rs.getRow()/results));
        }
    }

GUI 应在一个文本字段中显示在查询中找到的腔室,而在另一个文本字段中显示其余腔室。

当我在 IDE 中运行它时。我得到了正确的结果,但是一旦我使用 build.xml 文件中的 package-for-store 选项进行编译,结果就会在一个文本字段中列出所有的房间。

在 .jar 文件中,似乎所有的分庭都只满足第一个 if 子句,其他的都不满足。

标签: javasql

解决方案


推荐阅读