报错代码位置
vo =  nc.vo.gl.glreportcache.AccsubjDataCache.getInstance().getAccsubjVOByCode(pk_orgbook, (String) oSubj);
nc.vo.gl.glreportcache.AccsubjDataCache代码内容:
package nc.vo.gl.glreportcache;import java.util.HashMap;
import java.util.Iterator;
import java.util.Vector;import nc.bs.framework.common.NCLocator;
import nc.bs.logging.Logger;
import nc.itf.fi.pub.Accsubj;
import nc.itf.fi.pub.DataPower;
import nc.itf.uap.bd.accsubj.IAccsubjDataQuery;
import nc.vo.bd.b02.AccsubjGLVO;
import nc.vo.bd.b02.AccsubjVO;
import nc.vo.gl.datacache.AccsubjGLDataCacheVO;
import nc.vo.gl.sysparam.SystemParamConfig;
import nc.vo.ml.NCLangRes4VoTransl;
/**
 * 此处插入类型说明。
 * 创建日期:(2002-10-16 12:37:47)
 * @author:王剑
 */
public class AccsubjDataCache {

public static AccsubjDataCache instance = new AccsubjDataCache(); //科目数据
public static HashMap pk_keys_datacache = new HashMap(); public static HashMap code_keys_datacache = new HashMap();
    
    public static AccsubjMainCache datacache = new AccsubjMainCache(SystemParamConfig.getInstance().getAccsubjDatacacheServerNumber(),pk_keys_datacache,code_keys_datacache);    public static HashMap period_pk_keys_datacache = new HashMap();    public static HashMap period_code_keys_datacache = new HashMap();
    
    public static AccsubjPeriodMainCache perioddatacache = new AccsubjPeriodMainCache(SystemParamConfig.getInstance().getPeriodAccsubjDatacacheNumber(),period_pk_keys_datacache,period_code_keys_datacache);
LRUCache grouppk_datacache =   new LRUCache(10000); LRUCache<String, String[]> pk_glorgbook_accpkaray = new LRUCache<String,String[]>(100); Vector vKeys=new Vector();
/**
 * 此处插入方法说明。
 * 创建日期:(2002-10-16 14:32:38)
 * @return AccsubjSimpleVO[]
 * @param newpk_corp java.lang.String
 */
public void addAccsubjToCache1(String pk_orgBook, String pk_accsubj, String year, String period, AccsubjGLVO accsubj) {
    if (accsubj == null)
        return;
    if (pk_orgBook == null)
     pk_orgBook = accsubj.getPk_glorgbook();
    if (pk_accsubj == null)
        pk_accsubj = accsubj.getPk_accsubj();    AccsubjGLDataCacheVO datavo = (AccsubjGLDataCacheVO) datacache.get(pk_orgBook + year + period);
    if (datavo == null) {
        datavo = new AccsubjGLDataCacheVO();
    }
    else {
        datacache.remove(pk_orgBook + year + period);
    }
    AccsubjGLVO[] AccsubjGLVOs = datavo.getAccsubjGLvos();
    Vector<AccsubjGLVO> vec = new Vector<AccsubjGLVO>();
    if (AccsubjGLVOs != null) {
        for (int i = 0; i < AccsubjGLVOs.length; i++) {
            vec.addElement(AccsubjGLVOs[i]);
        }
    }
    if (vec.indexOf(accsubj) < 0)
        vec.addElement(accsubj);
    AccsubjGLVO[] accs = new AccsubjGLVO[vec.size()];
    vec.copyInto(accs);
    datavo.setAccsubjGLvos(accs);
    datavo.setAccsubjVOqueried(true);
    datacache.put(pk_orgBook + year + period, datavo);    HashMap pkmap = (HashMap) period_pk_keys_datacache.get(year + period);
    if (pkmap == null)
        pkmap = new HashMap();
    HashMap codemap = (HashMap) period_code_keys_datacache.get(year + period);
    if (codemap == null)
        codemap = new HashMap();
    pkmap.put(accsubj.getPk_accsubj(), accsubj);
    codemap.put(pk_orgBook + accsubj.getSubjcode(), accsubj);
    period_pk_keys_datacache.put(year + period, pkmap);
    period_code_keys_datacache.put(year + period, codemap);}/**
 * 此处插入方法说明。
 * 创建日期:(2003-9-4 12:01:18)
 */
public static void clear() {
    datacache.clear();
    pk_keys_datacache.clear();
    code_keys_datacache.clear();
    period_code_keys_datacache.clear();
    period_pk_keys_datacache.clear();
}
/**
 * 此处插入方法说明。
 * 创建日期:(2003-9-4 12:01:18)
 */
public void clear(String pk_corp)
{
    datacache.remove(pk_corp);
    Iterator itcode = code_keys_datacache.keySet().iterator();
    while (itcode.hasNext())
    {
        String key = (String) itcode.next();
        if (key.startsWith(pk_corp))
        {
            code_keys_datacache.remove(key);
        }
    }
    Iterator itpk = pk_keys_datacache.keySet().iterator();
    while (itpk.hasNext())
    {
        String key = (String) itpk.next();
        if (key.startsWith(pk_corp))
        {
            pk_keys_datacache.remove(key);
        }
    }
}
/**
 * 此处插入方法说明。
 * 创建日期:(2002-10-16 14:32:38)
 * @return AccsubjGLVO[]
 * @param newpk_corp java.lang.String
 */
public AccsubjGLVO getAccsubjVOByCode(String pk_orgbook, String subjcode) throws Exception
{
if (pk_orgbook == null || subjcode == null || subjcode.length() == 0)
return null; if(NCUFOCatchContainer.hm_AccsubjContainer.get(Thread.currentThread())==null)
throw new Exception(nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("2002GL502","UPP2002GL502-000257")/*@res "未读到当前进程的数据源"*/);
String dataSourceName  = (String)NCUFOCatchContainer.hm_AccsubjContainer.get(Thread.currentThread());
String codeDataCatchKey = dataSourceName+"&"+pk_orgbook + subjcode;
AccsubjGLVO AccsubjGLVO = (AccsubjGLVO) code_keys_datacache.get(codeDataCatchKey); if (AccsubjGLVO == null)
{
Logger.debug("从缓存中未读的相应的科目信息...");
try
{
Logger.debug("尝试从数据库中读取科目信息...getAccsubjGLVOByCode(String pk_orgbook, String subjcode)" + pk_orgbook + "codeDataCatchKey" + codeDataCatchKey);
    getAccsubjGLVOs(pk_orgbook);
AccsubjGLVO = (AccsubjGLVO) code_keys_datacache.get(codeDataCatchKey);
Logger.debug("从数据库中读取科目信息" + (AccsubjGLVO == null ? 0 : 1) + "条。");
}
catch (nc.vo.glpub.GlBusinessException e)
{
Logger.error("===========================\n从数据库中读取科目信息失败。\n\n\n");
throw e;
}
catch (Exception e)
{
Logger.error("===========================\n从数据库中读取科目信息失败。\n\n\n");
Logger.error(e.getMessage(), e);
throw e;
}
}
// else
// {
// Logger.debug("键值 " + codeDataCatchKey + " 成功从缓存里找到匹配项");
// }
return AccsubjGLVO;
}
/**
 * 此处插入方法说明。
 * 创建日期:(2002-10-16 14:32:38)
 * @return AccsubjGLVO[]
 * @param newpk_corp java.lang.String
 */
public AccsubjGLVO getAccsubjVOByCode(String pk_glorgbook, String subjcode, String year, String period) throws Exception {
    if (pk_glorgbook == null || subjcode == null || subjcode.length() == 0)
        return null;    AccsubjGLVO AccsubjGLVO = null;
    if(NCUFOCatchContainer.hm_AccsubjContainer.get(Thread.currentThread())==null)
throw new Exception(nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("2002GL502","UPP2002GL502-000257")/*@res "未读到当前进程的数据源"*/);
String dataSourceName  = (String)NCUFOCatchContainer.hm_AccsubjContainer.get(Thread.currentThread());
String dataCatchKey=dataSourceName+"&"+pk_glorgbook+ year + period+subjcode;
AccsubjGLVO = (AccsubjGLVO)code_keys_datacache.get(dataCatchKey);
    if (AccsubjGLVO == null) {
        Logger.debug("从缓存中未读的相应的科目信息...");
        try {
            Logger.debug("尝试从数据库中读取科目信息...");
            getAccsubjGLVOs(pk_glorgbook, year, period);
            Logger.debug("从数据库中读取科目信息" + (AccsubjGLVO == null ? 0 : 1) + "条。");
            AccsubjGLVO = (AccsubjGLVO)code_keys_datacache.get(dataCatchKey);
        }
        catch (nc.vo.glpub.GlBusinessException be) {
            Logger.debug("===========================\n从数据库中读取科目信息失败。\n\n\n");
            throw be;
        }
        catch (Exception e) {
            Logger.error("===========================\n从数据库中读取科目信息失败。\n\n\n");
            Logger.error(e.getMessage(), e);
            throw e;
        }
    }
//    else {
//     Logger.debug("键值 " + dataCatchKey + " 成功从缓存里找到匹配项");
//    }
    return AccsubjGLVO;
}
/**
 * 此处插入方法说明。
 * 创建日期:(2002-10-16 14:32:38)
 * @return AccsubjGLVO[]
 * @param newpk_corp java.lang.String
 */
public AccsubjGLVO getAccsubjVOByPK(String pk_accsubj) throws  Exception
{
if (pk_accsubj == null || pk_accsubj.length() == 0)
return null;
//Logger.debug("从缓存中读取科目信息...");
if(NCUFOCatchContainer.hm_AccsubjContainer.get(Thread.currentThread())==null)
throw new Exception(nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("2002GL502","UPP2002GL502-000257")/*@res "未读到当前进程的数据源"*/);
String dataSourceName  = (String)NCUFOCatchContainer.hm_AccsubjContainer.get(Thread.currentThread());
String pkDataCatchKey = dataSourceName+"&"+pk_accsubj;
AccsubjGLVO AccsubjGLVO = (AccsubjGLVO) pk_keys_datacache.get(pkDataCatchKey); if (AccsubjGLVO == null)
{
Logger.debug("从缓存中未读的相应的科目信息...");
try
{
Logger.debug("尝试从数据库中读取科目信息..."); AccsubjVO as = Accsubj.findByPrimaryKey(pk_accsubj); if (as != null)
{
getAccsubjGLVOs(as.getPk_glorgbook());
AccsubjGLVO = (AccsubjGLVO) pk_keys_datacache.get(pkDataCatchKey);
}
Logger.debug("从数据库中读取科目信息" + (AccsubjGLVO == null ? 0 : 1) + "条。");
}
catch (nc.vo.glpub.GlBusinessException e)
{
Logger.debug("===========================\n从数据库中读取科目信息失败。\n\n\n");
throw e;
}
catch (Exception e)
{
Logger.debug("===========================\n从数据库中读取科目信息失败。\n\n\n");
Logger.error(e.getMessage(), e);
throw e;
}
}
// else
// {
// Logger.debug("键值 " + pkDataCatchKey + " 成功从缓存里找到匹配项");
// }
//AccsubjGLVO.setAccRemove(new nc.vo.pub.lang.UFBoolean(true));
return AccsubjGLVO;
}
}

解决方案 »

  1.   

    执行命令是不是打错了,或者jar包是不是打错了。(吐槽下这个代码,if后面都不喜欢接大括号吗)
      

  2.   

    补充说明:报错日志
    [AWT-EventQueue-0] ERROR - [预算]系统发生异常 
    [AWT-EventQueue-0] ERROR - Fatal unknown error
    nc.bs.framework.exception.FrameworkEJBException: Fatal unknown error
    at nc.itf.tb.NtbPublic.EJB_Local.getBatchUFOResults(EJB_Local.java:3328)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:592)
    at nc.bs.framework.ejb.AbstractEJBServiceHandler.invoke(AbstractEJBServiceHandler.java:56)
    at nc.bs.framework.ejb.AbstractEJBServiceHandler.invoke(AbstractEJBServiceHandler.java:34)
    at $Proxy30.getBatchUFOResults(Unknown Source)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:592)
    at nc.bs.framework.comn.serv.ServiceDispatcher.invokeBeanMethod(ServiceDispatcher.java:351)
    at nc.bs.framework.comn.serv.ServiceDispatcher.execCall(ServiceDispatcher.java:160)
    at nc.bs.framework.comn.serv.CommonServletDispatcher.doGet(CommonServletDispatcher.java:75)
    at nc.bs.framework.comn.serv.CommonServletDispatcher.doPost(CommonServletDispatcher.java:95)
    Caused by: java.lang.NoClassDefFoundError
    at nc.vo.gl.glreporttools.PrepareParameterForReport.prepareParasForReport(PrepareParameterForReport.java:323)
    at nc.vo.gl.glreporttools.GroupFunctionTool.getFctGrpsOnAssType(GroupFunctionTool.java:512)
    at nc.ui.gl.glreport.FunctionExecutor.exFctBtch1(FunctionExecutor.java:740)
    at nc.ui.gl.glreporttools.OriginalSrvCallNCGL.callFunc1(OriginalSrvCallNCGL.java:391)
    at nc.ui.gl.glreporttools.OriginalSrvCallNCGL.callFunc(OriginalSrvCallNCGL.java:760)
    at nc.ui.fi.uforeport.NCFuncForUFO.calcFuncValues(NCFuncForUFO.java:88)
    at nc.impl.ntb.UFOExecutorImpl.getBatchUFOResults(UFOExecutorImpl.java:218)
    at nc.itf.tb.NtbPublic.EJBEjbBean.getBatchUFOResults(EJBEjbBean.java:893)
    at nc.itf.tb.NtbPublic.EJB_Local.getBatchUFOResults(EJB_Local.java:3322)
    ... 15 more
      

  3.   

    windows下没有问题 一到linux环境下就报错!
      

  4.   

    问题已解决:后台详细日志
    nc.bs.framework.exception.FrameworkEJBException: Fatal unknown error
    at nc.itf.tb.NtbPublic.EJB_Local.getBatchUFOResults(EJB_Local.java:3389)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:592)
    at nc.bs.framework.ejb.AbstractEJBServiceHandler.invoke(AbstractEJBServiceHandler.java:56)
    at nc.bs.framework.ejb.AbstractEJBServiceHandler.invoke(AbstractEJBServiceHandler.java:34)
    at $Proxy23.getBatchUFOResults(Unknown Source)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:592)
    at nc.bs.framework.comn.serv.ServiceDispatcher.invokeBeanMethod(ServiceDispatcher.java:351)
    at nc.bs.framework.comn.serv.ServiceDispatcher.execCall(ServiceDispatcher.java:160)
    at nc.bs.framework.comn.serv.CommonServletDispatcher.doGet(CommonServletDispatcher.java:75)
    at nc.bs.framework.comn.serv.CommonServletDispatcher.doPost(CommonServletDispatcher.java:95)
    Caused by: java.lang.ExceptionInInitializerError
    at nc.vo.gl.glreporttools.PrepareParameterForReport.prepareParasForReport(PrepareParameterForReport.java:248)
    at nc.vo.gl.glreporttools.GroupFunctionTool.getFctGrpsOnAssType(GroupFunctionTool.java:512)
    at nc.ui.gl.glreport.FunctionExecutor.exFctBtch1(FunctionExecutor.java:740)
    at nc.ui.gl.glreporttools.OriginalSrvCallNCGL.callFunc1(OriginalSrvCallNCGL.java:391)
    at nc.ui.gl.glreporttools.OriginalSrvCallNCGL.callFunc(OriginalSrvCallNCGL.java:760)
    at nc.ui.fi.uforeport.NCFuncForUFO.calcFuncValues(NCFuncForUFO.java:88)
    at nc.impl.ntb.UFOExecutorImpl.getBatchUFOResults(UFOExecutorImpl.java:218)
    at nc.itf.tb.NtbPublic.EJBEjbBean.getBatchUFOResults(EJBEjbBean.java:907)
    at nc.itf.tb.NtbPublic.EJB_Local.getBatchUFOResults(EJB_Local.java:3383)
    ... 15 more
    Caused by: java.lang.StringIndexOutOfBoundsException: String index out of range: -1
    at java.lang.String.substring(String.java:1768)
    at nc.vo.gl.sysparam.SystemParamConfig.initCache(SystemParamConfig.java:46)
    at nc.vo.gl.sysparam.SystemParamConfig.getConfig(SystemParamConfig.java:63)
    at nc.vo.gl.sysparam.SystemParamConfig.getAccsubjDatacacheServerNumber(SystemParamConfig.java:104)
    at nc.vo.gl.glreportcache.AccsubjDataCache.<clinit>(AccsubjDataCache.java:31)
    ... 24 more[b]发现问题根本的原因是Caused by: java.lang.StringIndexOutOfBoundsException: String index out of range: -1这个报错导致的![/b]