无法初始化类

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了无法初始化类相关的知识,希望对你有一定的参考价值。

Servlet.service() for servlet UserinfoServlet threw exception
java.lang.NoClassDefFoundError: Could not initialize class com.edu.dao.DBDao
at com.edu.dao.BaseDao.executeUpdate(BaseDao.java:27)
at com.edu.Userinfo.UserinfoDao.sava(UserinfoDao.java:14)
at com.edu.servlet.UserinfoServlet.save(UserinfoServlet.java:44)
at com.edu.servlet.UserinfoServlet.doGet(UserinfoServlet.java:22)
at com.edu.servlet.UserinfoServlet.doPost(UserinfoServlet.java:36)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at com.edu.common.MyFitler.doFilter(MyFitler.java:23)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:261)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:581)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Thread.java:619)
public static void executeUpdate(String sql,Object...objs)
Connection conn=null;
PreparedStatement pstmt=null;
try
conn=DBDao.getConnection();
pstmt=conn.prepareStatement(sql);
if(objs!=null&&objs.length>0)
for(int i=0;i< objs.length;i++)
pstmt.setObject(i+1, objs[i]);


catch(Exception e)
throw new RuntimeException("数据操作失败"+e);
finally
DBDao.colse(null, pstmt, conn);

参考技术A at com.edu.dao.BaseDao.executeUpdate(BaseDao.java:27)

主要就在BaseDao.java:27行,把这个代码贴上来看看追问

27: DBDao.colse(null, pstmt, conn);

追答

DBDao.colse()这应该个接口吧,
colse()是静态方法吗?
你这样调用肯定报错啊,接口不能实例化
你应该声明一个接口对象,
私有化还是公共的根据你其他的定,
下面的给你参考
private DBDao dbDao;

dbDao.colse(null, pstmt, conn);

CoreData:错误:无法在 NSManagedObject 自定义类上调用指定的初始化程序

【中文标题】CoreData:错误:无法在 NSManagedObject 自定义类上调用指定的初始化程序【英文标题】:CoreData: error: Failed to call designated initializer on NSManagedObject custom class 【发布时间】:2016-05-23 18:50:18 【问题描述】:

当我调用函数 CacheStation 时,我收到错误:CoreData:错误:无法调用 NSManagedObject 类 SaveModel 上的指定初始化程序。不多不少。我该如何解决这个问题?

SaveModel.swift:

import Foundation
    import CoreData
    import UIKit

class SaveModel: NSManagedObject 

    func CacheStations()
        // create an instance of our managedObjectContext
        let moc = (UIApplication.sharedApplication().delegate as! AppDelegate).managedObjectContext

        // we set up our entity by selecting the entity and context that we're targeting
        let entity = NSEntityDescription.insertNewObjectForEntityForName("CachedStations", inManagedObjectContext: moc) as! SaveModel

        //add the data
        entity.land = "nl";

        // we save our entity
        do 
            try moc.save()
         catch 
            fatalError("Failure to save context: \(error)")
        

SaveModel+CoreDataProperties.swift:

import Foundation
import CoreData

extension SaveModel 
    @NSManaged var land: String?

我称之为 CacheStations 的地方:

import UIKit

class ViewController: UIViewController 

    @IBAction func saveShizzle(sender: AnyObject) 
        let sm = SaveModel();
        sm.CacheStations();
    

【问题讨论】:

请问您能在调用 CacheStations 的地方显示代码吗? @pbasdf 添加了代码,我更进一步,它在 let sm = SaveModel(); 时崩溃了 【参考方案1】:

这一行:

let sm = SaveModel();

使用标准的init() 方法创建SaveModel 的实例,但NSManagedObjects 必须使用指定的初始化器进行初始化:

init(entity entity: NSEntityDescription, insertIntoManagedObjectContext context: NSManagedObjectContext?)

(或者,在您的 CacheStations 方法中,使用调用指定初始化程序的NSEntityDescription.insertNewObjectForEntityForName(_, inManagedObjectContext: moc))。

由于似乎sm 的创建只是为了有一个可以调用CacheStations 的实例,因此我将该方法更改为类方法:

class func CacheStations()

并更改您的 saveShizzle 方法以使用类方法:

@IBAction func saveShizzle(sender: AnyObject) 
    SaveModel.CacheStations();

【讨论】:

【参考方案2】:

会发生什么:

    当您调用let sm = SaveModel(); 时,您正在创建SaveModel 的新实例。 SaveModelNSManagedObject 的子类 NSManagedObject 有一个名为 init(_: insertIntoManagedObjectContext:) 的指定初始化程序 您的子类没有添加任何类型的初始化器,这意味着您必须调用超类指定的初始化器。 您没有这样做,因此您会收到一条描述确切问题的错误消息。

您需要调用NSManagedObject 指定初始化程序或创建您自己的指定初始化程序来调用超类指定初始化程序。

【讨论】:

以上是关于无法初始化类的主要内容,如果未能解决你的问题,请参考以下文章

无法初始化类对象:Objective-C

“NoClassDefFoundError:无法初始化类”错误

排毒 - 无法初始化类 DefaultKotlinSourceSetKt

> 无法初始化类 com.android.repository.api.RepoManager

无法初始化类 org.codehaus.groovy.reflection.ReflectionCache

java.lang.NoClassDefFoundError:无法初始化类 XXX