标签: classcastexception

在Android中动态加载类时ClassCastException

我有一个线程,根据系统的具体实现,为所需的资源加载不同的类.我的实现在Android上,我有一个类,它返回我的实现所需的特定类.我似乎能够很好地加载类,但是当我尝试将它分配给主线程中的对象时,它给了我一个ClassCastException.以下是片段:

在我的主线程中,我做:

    try {
        grammarProcessor = config.loadObject(GrammarProcessor.class);
Run Code Online (Sandbox Code Playgroud)

这给了我这个堆栈跟踪:

    E/AndroidRuntime(6682): FATAL EXCEPTION: JVoiceXmlMain
    E/AndroidRuntime(6682): java.lang.ClassCastException: org.jvoicexml.android.JVoiceXmlGrammarProcessor
    E/AndroidRuntime(6682):     at org.jvoicexml.JVoiceXmlMain.run(JVoiceXmlMain.java:321)
Run Code Online (Sandbox Code Playgroud)

GrammarProcessor是一个接口,JVoiceXmlGrammarProcessor是我加载和实现该接口的类.加载代码如下:

else if(baseClass == GrammarProcessor.class){
        String packageName = "org.jvoicexml.android";
        String className = "org.jvoicexml.android.JVoiceXmlGrammarProcessor";           
        String apkName = null;
        Class<?> handler = null;
        T b = null;

        try {
            PackageManager manager = callManagerContext.getPackageManager();
            ApplicationInfo info= manager.getApplicationInfo(packageName, 0);
            apkName= info.sourceDir;
        } catch (NameNotFoundException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
            return null;
        }
        PathClassLoader myClassLoader =
            new dalvik.system.PathClassLoader(
                    apkName,
                    ClassLoader.getSystemClassLoader());
        try …
Run Code Online (Sandbox Code Playgroud)

android dynamic classloader classcastexception

8
推荐指数
1
解决办法
2635
查看次数

迭代参数化List(在原始List类型赋值之后)

语言:Java
编译器版本:1.6

在下面的代码中,我尝试执行以下操作:

  1. 创建一个 List<String>
  2. 添加一个 String
  3. 分配List<String>到原始List
  4. 创建一个 List<Integer>
  5. 将原始分配ListList<Integer>
  6. 添加一个 Integer
  7. 使用get()@index 1和2 检索值并打印它们.

所有语句都在编译(带警告)并运行正常.

但是,如果我尝试循环List<Integer>使用for循环,我会得到一个ClassCastException.我只是想知道为什么它允许我使用list.get()方法但不允许我迭代它?

输出:( 如果我使用未注释的for循环运行)abcd 200

Exception in thread "main" java.lang.ClassCastException: java.lang.String cannot  be cast to java.lang.Integer
        at genericsamples.CheckRawTypeAdd.main(CheckRawTypeAdd.java:26)
Run Code Online (Sandbox Code Playgroud)

这是我的代码

import java.util.*;
import java.io.*;
class CheckRawTypeAdd
{
    public static void main(String[] sr)
    {   
        List<String> list_str = new ArrayList<String>();
        list_str.add("abcd");
        List<Integer> list_int = new ArrayList<Integer>();  
        List list_raw; 
        list_raw=list_str;
        list_int=list_raw;
        list_int.add(200); …
Run Code Online (Sandbox Code Playgroud)

java generics foreach classcastexception

8
推荐指数
1
解决办法
1349
查看次数

Servlet.service()抛出ClassCastException

我有一个java Web应用程序.我已经设置了这个新项目并在运行jsp时遇到以下异常,

Oct 10, 2012 3:01:49 AM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet jsp threw exception
java.lang.ClassCastException: org.apache.catalina.util.DefaultAnnotationProcessor cannot be cast to org.apache.AnnotationProcessor
    at org.apache.jasper.servlet.JspServletWrapper.getServlet(JspServletWrapper.java:151)
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:340)
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
    at java.lang.Thread.run(Thread.java:619)
Oct 10, 2012 3:01:57 AM org.apache.catalina.loader.WebappClassLoader modified
INFO:     Additional JARs have been added : 'activation-1.1.jar'
Oct 10, 2012 3:01:57 AM org.apache.catalina.core.StandardContext reload
INFO: …
Run Code Online (Sandbox Code Playgroud)

java servlets jdk1.6 classcastexception tomcat6

8
推荐指数
1
解决办法
1万
查看次数

Android ClassCastException with blank type

I am getting a strange behavior, and I guess I'm more looking for an explanation than a solution (although solution is welcome as well!).

Here's the code:

PackageManager pm = context.getPackageManager();
List<PackageInfo> pkgList = pm.getInstalledPackages(PackageManager.GET_UNINSTALLED_PACKAGES);
if (pkgList == null)
   return null;
for (PackageInfo pkgInfo : pkgList) {
   ApplicationInfo appInfo = pkgInfo.applicationInfo;
   // do some stuff, doesn't modify pkgInfo or appInfo or pkgList
} 
Run Code Online (Sandbox Code Playgroud)

And on some occasions, I am getting error logs with:

java.lang.ClassCastException: cannot be cast to android.content.pm.PackageInfo

reported …

java android exception classcastexception android-package-managers

8
推荐指数
1
解决办法
462
查看次数

不应该此代码产生ClassCastException

以下代码编译并成功运行,没有任何异常

import java.util.ArrayList;

class SuperSample {}

class Sample extends SuperSample {

  @SuppressWarnings("unchecked")
  public static void main(String[] args) {

    try {

      ArrayList<Sample> sList = new ArrayList<Sample>();
      Object o = sList;
      ArrayList<SuperSample> ssList = (ArrayList<SuperSample>)o;
      ssList.add(new SuperSample());

    } catch (Exception e) {
      e.printStackTrace();
    }

  }
}
Run Code Online (Sandbox Code Playgroud)

不应该ArrayList<SuperSample> ssList = (ArrayList<SuperSample>)o;生产线ClassCastException

虽然下面的代码产生编译时错误错误以防止堆污染,但上面提到的代码不应该在运行时进行类似的预防吗?

ArrayList<Sample> sList = new ArrayList<Sample>();
ArrayList<SuperSample> ssList = (ArrayList<SuperSample>) sList;
Run Code Online (Sandbox Code Playgroud)

编辑:

如果Type Erasure是这背后的原因,是否应该有其他机制来防止无效对象被添加到List?例如

String[] iArray = new String[5];
Object[] iObject = iArray;
iObject[0]= …
Run Code Online (Sandbox Code Playgroud)

java generics classcastexception

8
推荐指数
2
解决办法
260
查看次数

从调用返回另一个代理的Java.lang.reflect.Proxy在赋值时导致ClassCastException

所以我正在玩geotools,我想我会代理他们的一个数据访问类,并跟踪它们在代码中的使用方式.

我编写了一个动态代理并在其中包含了一个FeatureSource(接口),并且很高兴.然后我想看看一些由featureSource返回,以及在传递对象,因为FeatureSource做的主要工作是返回的FeatureCollection(FeatureSource类似于一个SQL数据源,并以的FeatureCollection SQL语句).

在我的InvocationHandler我刚刚通过的调用底层对象,打印出目标类/方法/指定参数和结果,我去了,但是对于返回的FeatureCollection(另一个接口)调用,我裹着该对象在我的代理服务器(在相同的类,但一个新的实例,应该不重要吗?)并返回它.BAM!Classcast异常:

java.lang.ClassCastException: $Proxy5 cannot be cast to org.geotools.feature.FeatureCollection  
    at $Proxy4.getFeatures(Unknown Source)  
    at MyClass.myTestMethod(MyClass.java:295)  
Run Code Online (Sandbox Code Playgroud)

调用代码:

FeatureSource<SimpleFeatureType, SimpleFeature> featureSource = ... // create the FS
featureSource = (FeatureSource<SimpleFeatureType, SimpleFeature>) FeatureSourceProxy.newInstance(featureSource, features);
featureSource.getBounds();// ok
featureSource.getSupportedHints();// ok

DefaultQuery query1 = new DefaultQuery(DefaultQuery.ALL);
FeatureCollection<SimpleFeatureType, SimpleFeature> results = featureSource.getFeatures(query1); //<- explosion here
Run Code Online (Sandbox Code Playgroud)

代理人:

public class FeatureSourceProxy  implements java.lang.reflect.InvocationHandler {

private Object target;
private List<SimpleFeature> features;

public static Object newInstance(Object obj, List<SimpleFeature> features) {
return java.lang.reflect.Proxy.newProxyInstance(
    obj.getClass().getClassLoader(), 
    obj.getClass().getInterfaces(), 
    new FeatureSourceProxy(obj, features)
);
}

private …
Run Code Online (Sandbox Code Playgroud)

java reflection proxy classcastexception geotools

7
推荐指数
1
解决办法
2521
查看次数

从String转换为Object时出现ClassCastException ..为什么?

我只是在玩MessageFormat但是当我尝试将String传递给MessageFormat 格式时,它编译得很好,但后来我得到了一个运行时的classcast异常.这是代码.

MessageFormat format = new MessageFormat(""); Object obj = Integer.toHexString(10); format.format(obj);

现在我得到的运行时异常如下.

线程"main"中的异常java.lang.ClassCastException:java.lang.String无法强制转换为[Ljava.lang.Object; at java.text.MessageFormat.format(Unknown Source)at java.text.Format.format(Unknown Source)at JavaCore2.Codepoint.main(Codepoint.java:21)

casting exception classcastexception

7
推荐指数
1
解决办法
1896
查看次数

如何以编程方式设置自定义视图的宽度和高度?

我创建了一个名为MyDraw的自定义视图,这是我的MyDraw代码,

public class MyDraw extends View {


    public MyDraw(Context context) {
        super(context);

    }

    public MyDraw(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);

    }

    public MyDraw(Context context, AttributeSet attrs) {
        super(context, attrs);

    }
         ........................................
}
Run Code Online (Sandbox Code Playgroud)

我使用包名称在XML文件中添加了视图.它工作正常.现在我想在运行时为MyDraw设置高度和宽度,因为我使用了以下代码,

mMyDraw.setLayoutParams(new LayoutParams(220, 300));
Run Code Online (Sandbox Code Playgroud)

但我得到了例外,

java.lang.ClassCastException:android.view.ViewGroup $ LayoutParams

如何解决这个异常?请帮我..

android classcastexception android-layout

7
推荐指数
2
解决办法
2万
查看次数

Nimbus:java.lang.ClassCastException:javax.swing.plaf.nimbus.DerivedColor $ UIResource无法强制转换为javax.swing.Painter

我在我的挥杆应用程序中使用了Nimbus的外观和感觉.

有时,当显示对话框(使用dialog.setVisible(true))时,Nimbus外观会引发以下异常:

Caugth exception of type java.lang.ClassCastException with message javax.swing.plaf.nimbus.DerivedColor$UIResource cannot be cast to javax.swing.Painter 
java.lang.ClassCastException: javax.swing.plaf.nimbus.DerivedColor$UIResource cannot be cast to javax.swing.Painter
    at javax.swing.plaf.nimbus.NimbusStyle.getBackgroundPainter(NimbusStyle.java:708)
    at javax.swing.plaf.nimbus.SynthPainterImpl.paintBackground(SynthPainterImpl.java:99)
    at javax.swing.plaf.nimbus.SynthPainterImpl.paintPanelBackground(SynthPainterImpl.java:957)
    at javax.swing.plaf.synth.SynthPanelUI.update(SynthPanelUI.java:155)
    at javax.swing.JComponent.paintComponent(JComponent.java:778)
    at javax.swing.JComponent.paint(JComponent.java:1054)
    at javax.swing.JComponent.paintToOffscreen(JComponent.java:5221)
    at javax.swing.RepaintManager$PaintManager.paintDoubleBuffered(RepaintManager.java:1482)
    at javax.swing.RepaintManager$PaintManager.paint(RepaintManager.java:1413)
    at javax.swing.RepaintManager.paint(RepaintManager.java:1206)
    at javax.swing.JComponent._paintImmediately(JComponent.java:5169)
    at javax.swing.JComponent.paintImmediately(JComponent.java:4980)
    at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:770)
    at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:728)
    at javax.swing.RepaintManager.prePaintDirtyRegions(RepaintManager.java:677)
    at javax.swing.RepaintManager.access$700(RepaintManager.java:59)
    at javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1621)
    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:721)
    at java.awt.EventQueue.access$200(EventQueue.java:103)
    at java.awt.EventQueue$3.run(EventQueue.java:682)
    at java.awt.EventQueue$3.run(EventQueue.java:680)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:691)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:244)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:163)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:155)
    at …
Run Code Online (Sandbox Code Playgroud)

java swing classcastexception nimbus

7
推荐指数
1
解决办法
5257
查看次数

如何修复"java.lang.ClassCastException:com.android.layoutlib.bridge.android.BridgeContext无法强制转换为android.app.Activity"异常

当我创建一个自定义时View,在某些情况下我需要Context通过类的构造函数Activity强制转换类,为了使一些任务View直接在我的自定义View类中进行膨胀,我收到以下错误:

java.lang.ClassCastException: com.android.layoutlib.bridge.android.BridgeContext cannot be cast to android.app.Activity
Run Code Online (Sandbox Code Playgroud)

这是抛出此错误的行:

View headerView = ((Activity) context).getLayoutInflater().inflate(R.layout.fragment_history_list_header, null);
Run Code Online (Sandbox Code Playgroud)

看起来这个错误只发生在Eclipse试图膨胀要在XML编辑器中显示的视图时(不会在运行时发生).

有人知道如何解决它吗?

提前致谢.

android classcastexception android-custom-view

7
推荐指数
1
解决办法
5733
查看次数