这篇文章主要围绕跨ClassLoader的Java8ScriptEngine和java跨类调用展开,旨在为您提供一份详细的参考资料。我们将全面介绍跨ClassLoader的Java8ScriptEng
这篇文章主要围绕跨ClassLoader的Java 8 ScriptEngine和java跨类调用展开,旨在为您提供一份详细的参考资料。我们将全面介绍跨ClassLoader的Java 8 ScriptEngine的优缺点,解答java跨类调用的相关问题,同时也会为您带来android – dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:61)中的类加载错误?、ClassLoader.loadClass() throws java.lang.ClassNotFoundException、com.intellij.lang.javascript.JavaScriptSupportLoader的实例源码、dalvik.system.BaseDexClassLoader.findClass中的java.lang.ClassNotFoundException的实用方法。
本文目录一览:- 跨ClassLoader的Java 8 ScriptEngine(java跨类调用)
- android – dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:61)中的类加载错误?
- ClassLoader.loadClass() throws java.lang.ClassNotFoundException
- com.intellij.lang.javascript.JavaScriptSupportLoader的实例源码
- dalvik.system.BaseDexClassLoader.findClass中的java.lang.ClassNotFoundException
跨ClassLoader的Java 8 ScriptEngine(java跨类调用)
我需要在不同的类加载器内部执行一些javascript代码。如果是Java,则每个任务将在单独的类加载器中运行。现在,我需要使用JavaScript。
我需要ScriptEngine
在每个类加载器中创建的新实例,还是可以在类加载器之间共享一个实例?
答案1
小编典典从您的问题尚不清楚,您为什么要寻找这样的类加载器隔离。因此,我在这里总结nashorn的类加载器-也许,您会找到想要的东西。
Nashorn和类加载器:
- Nashorn类(jdk.nashorn。*)由Java扩展类加载器加载
- 生成的脚本类,适配器(子类,脚本的接口实现)由nashorn的内部类加载器加载。
- 从脚本引用的Java类由Nashorn的“应用类加载器”加载。
(1)和(2)无法自定义。nashorn代码中假设它是特权代码。并且有关于通用脚本类加载器和适配器加载器的假设。
(3)默认是创建nashorn引擎时的线程上下文类加载器。如果线程上下文类加载器为null,则使用Nashorn自己的加载器(扩展加载器)。
因此,如果在通过Thread.setContextClassLoader
API设置了合适的线程上下文加载器之后创建了Nashorn引擎,则可以控制脚本引擎的“应用程序类加载器”。
如果可以使用NashornScriptEngineFactory(特定于nashorn的API
https://docs.oracle.com/javase/8/docs/jdk/api/nashorn/jdk/nashorn/api/scripting/NashornScriptEngineFactory.html)创建脚本引擎,您也可以通过编程方式将任何类加载器作为“应用类加载器”传递。您可能要签出接受ClassLoader参数的NashornScriptEngineFactory方法。
除了“应用程序类加载器”外,您还可以选择在“应用程序类加载器”之前搜索其他附加的类加载器。这由“ -cp”或“ -classpath”
nashorn命令行选项指定。请注意,您可以通过“
nashorn.args”系统属性为脚本引擎指定nashorn命令行选项,也可以使用NashornScriptEngineFactory类的getScriptEngine方法以编程方式传递。另请参阅:https
:
//wiki.openjdk.java.net/display/Nashorn/Nashorn+jsr223+engine+notes
希望这可以帮助。
android – dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:61)中的类加载错误?
AndroidManifest.xml中:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.extremefitness.org" android:versionCode="1" android:versionName="1.0" > <supports-screens android:anyDensity="false" android:largeScreens="true" android:normalScreens="true" android:smallScreens="true" android:xlargeScreens="true" /> <uses-permission android:name="android.permission.INTERNET" > </uses-permission> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" > </uses-permission> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" > </uses-permission> <uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" /> <uses-permission android:name="android.permission.CLEAR_APP_CACHE" > </uses-permission> <uses-permission android:name="android.permission.disABLE_KEyguard" /> <uses-permission android:name="android.permission.WAKE_LOCK" /> <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name=".Tabbaractivity" android:windowSoftInputMode="adjustPan|adjustResize" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".HomeActivity" android:screenorientation="portrait" android:windowSoftInputMode="adjustPan|adjustResize" > </activity> <activity android:name="com.extremefitness.views.LoginActivity" android:noHistory="true" android:screenorientation="portrait" android:windowSoftInputMode="adjustPan|adjustResize" > </activity> <activity android:name="com.extremefitness.views.Registeractivity" android:noHistory="true" android:screenorientation="portrait" android:windowSoftInputMode="adjustPan|adjustResize" > </activity> <activity android:name="com.extremefitness.views.Profiletabactivity" android:screenorientation="portrait" android:windowSoftInputMode="adjustPan|adjustResize" > </activity> <activity android:name="com.extremefitness.views.RandomWorkouttabactivity" android:screenorientation="portrait" android:windowSoftInputMode="adjustPan|adjustResize" > </activity> <activity android:name="com.extremefitness.views.Tracktabactivity" android:screenorientation="portrait" android:windowSoftInputMode="adjustPan|adjustResize" > </activity> <activity android:name="com.extremefitness.views.Workouttabactivity" android:screenorientation="portrait" android:windowSoftInputMode="adjustPan|adjustResize" > </activity> <activity android:name="com.extremefitness.views.StatsActivity" android:screenorientation="portrait" android:windowSoftInputMode="adjustPan|adjustResize" > </activity> <activity android:name="com.extremefitness.views.ExerciseActivity" android:screenorientation="portrait" android:windowSoftInputMode="adjustPan|adjustResize" > </activity> <activity android:name="com.extremefitness.views.CustomDialog" android:screenorientation="portrait" android:windowSoftInputMode="adjustPan|adjustResize" > </activity> <activity android:name="com.extremefitness.views.WorkoutDescription" android:noHistory="true" android:screenorientation="portrait" android:windowSoftInputMode="adjustPan|adjustResize" > </activity> <activity android:name="com.extremefitness.views.ExerciseDescription" android:screenorientation="portrait" android:windowSoftInputMode="adjustPan|adjustResize" > </activity> <activity android:name="com.extremefitness.views.Settings" android:screenorientation="portrait" android:windowSoftInputMode="adjustPan|adjustResize" > </activity> <activity android:name="com.extremefitness.views.RandomWorkoutResponse" android:screenorientation="portrait" android:windowSoftInputMode="adjustPan|adjustResize" > </activity> <activity android:name=".FBActivity" android:screenorientation="portrait" android:windowSoftInputMode="adjustPan|adjustResize" > </activity> <activity android:name=".Twitteractivity" android:screenorientation="portrait" android:windowSoftInputMode="adjustPan|adjustResize" > </activity> <activity android:name="com.extremefitness.views.VideoDialog" android:configChanges="orientation|screenSize|keyboardHidden" android:screenorientation="nosensor" > <Meta-data android:name="@string/minVersion" android:value="8" /> <Meta-data android:name="@string/isLaunchableActivity" android:value="true" /> </activity> <activity android:name="com.extremefitness.views.WorktVideoDialog" android:configChanges="orientation|screenSize|keyboardHidden" android:screenorientation="nosensor" > <Meta-data android:name="@string/minVersion" android:value="8" /> <Meta-data android:name="@string/isLaunchableActivity" android:value="true" /> </activity> </application> </manifest>
错误的日志:
04-26 14:45:08.211: E/AndroidRuntime(2179): FATAL EXCEPTION: main 04-26 14:45:08.211: E/AndroidRuntime(2179): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.extremefitness.org/com.extremefitness.org.Tabbaractivity}: java.lang.classNotFoundException: com.extremefitness.org.Tabbaractivity 04-26 14:45:08.211: E/AndroidRuntime(2179): at android.app.ActivityThread.performlaunchActivity(ActivityThread.java:1894) 04-26 14:45:08.211: E/AndroidRuntime(2179): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1995) 04-26 14:45:08.211: E/AndroidRuntime(2179): at android.app.ActivityThread.access$600(ActivityThread.java:128) 04-26 14:45:08.211: E/AndroidRuntime(2179): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1161) 04-26 14:45:08.211: E/AndroidRuntime(2179): at android.os.Handler.dispatchMessage(Handler.java:99) 04-26 14:45:08.211: E/AndroidRuntime(2179): at android.os.Looper.loop(Looper.java:137) 04-26 14:45:08.211: E/AndroidRuntime(2179): at android.app.ActivityThread.main(ActivityThread.java:4517) 04-26 14:45:08.211: E/AndroidRuntime(2179): at java.lang.reflect.Method.invokeNative(Native Method) 04-26 14:45:08.211: E/AndroidRuntime(2179): at java.lang.reflect.Method.invoke(Method.java:511) 04-26 14:45:08.211: E/AndroidRuntime(2179): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:993) 04-26 14:45:08.211: E/AndroidRuntime(2179): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:760) 04-26 14:45:08.211: E/AndroidRuntime(2179): at dalvik.system.NativeStart.main(Native Method) 04-26 14:45:08.211: E/AndroidRuntime(2179): Caused by: java.lang.classNotFoundException: com.extremefitness.org.Tabbaractivity 04-26 14:45:08.211: E/AndroidRuntime(2179): at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:61) 04-26 14:45:08.211: E/AndroidRuntime(2179): at java.lang.classLoader.loadClass(ClassLoader.java:501) 04-26 14:45:08.211: E/AndroidRuntime(2179): at java.lang.classLoader.loadClass(ClassLoader.java:461) 04-26 14:45:08.211: E/AndroidRuntime(2179): at android.app.Instrumentation.newActivity(Instrumentation.java:1027) 04-26 14:45:08.211: E/AndroidRuntime(2179): at android.app.ActivityThread.performlaunchActivity(ActivityThread.java:1885) 04-26 14:45:08.211: E/AndroidRuntime(2179): ... 11 more
解决方法
ClassLoader.loadClass() throws java.lang.ClassNotFoundException
今天写一个 RMI 的应用,气死人了,弄半天,跑到 sun 官网去一看,告诉我是一个 BUG, 我流出了鼻血。
ToWork:
-Dsun.lang.ClassLoader.allowArraySyntax=true
点击打开链接
原文链接: http://blog.csdn.net/chengchanglun/article/details/7441034
com.intellij.lang.javascript.JavaScriptSupportLoader的实例源码
public static String findPackageForMxml(final PsiElement expression) { String s = null; final PsiFile containingFile = expression.getContainingFile(); if(containingFile.getLanguage() == JavaScriptSupportLoader.ECMA_SCRIPT_L4 && containingFile.getContext() != null) { final PsiFile contextContainigFile = containingFile.getContext().getContainingFile(); VirtualFile file = contextContainigFile.getVirtualFile(); if(file == null && contextContainigFile.getoriginalFile() != null) { file = contextContainigFile.getoriginalFile().getVirtualFile(); } s = getExpectedPackageNameFromFile(file,containingFile.getProject(),true); } return s; }
public static JSClass getClassFromTagNameInMxml(final PsiElement psiElement) { XmlTag tag = psiElement != null ? PsiTreeUtil.getNonStrictParentOfType(psiElement,XmlTag.class) : null; if(tag != null && (tag.getNamespacePrefix().length() > 0 || JavaScriptSupportLoader.isFlexMxmFile(tag.getContainingFile()))) { if(isScriptContextTag(tag)) { tag = ((XmlFile) tag.getContainingFile()).getDocument().getRoottag(); } final XmlElementDescriptor descriptor = tag.getDescriptor(); if(descriptor != null) { PsiElement decl = descriptor.getDeclaration(); if(decl instanceof JSClass) { return ((JSClass) decl); } else if(decl instanceof XmlFile) { return XmlBackedJSClassImpl.getXmlBackedClass((XmlFile) decl); } } } return null; }
public static String findScriptNs(XmlTag roottag) { String ns = roottag.getNamespace(); if(JavaScriptSupportLoader.isFlexMxmFile(roottag.getContainingFile())) { ns = ""; for(String testNs : JavaScriptSupportLoader.MXML_URIS) { if(roottag.getPrefixByNamespace(testNs) != null) { ns = testNs; break; } } } return ns; }
@NotNull @Override public String[] getNames(Project project,boolean includeNonProjectItems) { final Set<String> result = new HashSet<String>(); result.addAll(StubIndex.getInstance().getAllKeys(JavaScriptIndexKeys.ELEMENTS_BY_NAME,project)); FileBasedindex.getInstance().processAllKeys(FilenameIndex.NAME,new Processor<String>() { @Override public boolean process(String s) { if(JavaScriptSupportLoader.isFlexMxmFile(s)) { result.add(FileUtil.getNameWithoutExtension(s)); } return true; } },project); return result.toArray(new String[result.size()]); }
@Override public void actionPerformed(final AnActionEvent e) { Editor editor = e.getData(PlatformDataKeys.EDITOR); PsiFile psifile = e.getData(LangDataKeys.PSI_FILE); Project project = e.getData(PlatformDataKeys.PROJECT); final VirtualFile file = e.getData(PlatformDataKeys.VIRTUAL_FILE); if(JavaScriptSupportLoader.isFlexMxmFile(file)) { editor = BaseCodeInsightAction.getInjectedEditor(project,editor); psifile = PsiUtilBase.getPsiFileInEditor(editor,project); } new JavaScriptGenerateAccessorHandler(getGenerationMode()).invoke(project,editor,psifile); }
private static void process(final JSNamedElement node,final ProblemsHolder holder) { if(node.getContainingFile().getLanguage() != JavaScriptSupportLoader.ECMA_SCRIPT_L4) { return; } PsiElement nameIdentifier = node.getNameIdentifier(); if(nameIdentifier != null && JSPsiImplUtils.getTypeFromDeclaration(node) == null && (!(node instanceof JSParameter) || !((JSParameter) node).isRest())) { holder.registerProblem(nameIdentifier,JavaScriptBundle.message(node instanceof JSFunction ? "js.untyped.function.problem" : "js.untyped" + ".variable.problem",nameIdentifier.getText()),ProblemHighlightType.GENERIC_ERROR_OR_WARNING,new AddTypetoDclFix()); } }
public EmberJSParser(PsiBuilder builder) { super(JavaScriptSupportLoader.JAVASCRIPT_1_5,builder); myExpressionParser = new EmberJSExpressionParser(); myStatementParser = new StatementParser<EmberJSParser>(this) { @Override protected void doParseStatement(boolean canHaveClasses) { final IElementType firstToken = builder.getTokenType(); if (firstToken == JSTokenTypes.LBRACE) { parseExpressionStatement(); checkForSemicolon(); return; } if (isIdentifierToken(firstToken)) { final IElementType nextToken = builder.lookAhead(1); if (nextToken == JSTokenTypes.IN_KEYWORD) { parseInStatement(); return; } } if (builder.getTokenType() == JSTokenTypes.LPAR) { if (parseInStatement()) { return; } } super.doParseStatement(canHaveClasses); } private boolean parseInStatement() { PsiBuilder.Marker statement = builder.mark(); if (!getExpressionParser().parseInExpression()) { statement.drop(); return false; } statement.done(JSElementTypes.EXPRESSION_STATEMENT); return true; } }; }
private static String doGenerateDoc(final JSFunction function) { StringBuilder builder = new StringBuilder(); final JSParameterList parameterList = function.getParameterList(); final PsiFile containingFile = function.getContainingFile(); final boolean ecma = containingFile.getLanguage() == JavaScriptSupportLoader.ECMA_SCRIPT_L4; if(parameterList != null) { for(JSParameter parameter : parameterList.getParameters()) { builder.append("* @param ").append(parameter.getName()); //String s = JSPsiImplUtils.getTypeFromDeclaration(parameter); //if (s != null) builder.append(" : ").append(s); builder.append("\n"); } } if(ecma) { String s = JSPsiImplUtils.getTypeFromDeclaration(function); if(s != null && !"void".equals(s)) { builder.append("* @return "); //builder.append(s); builder.append("\n"); } } return builder.toString(); }
public static Collection<JSQualifiednamedElement> findElementsByName(String name,Project project,GlobalSearchScope scope) { final Set<JSQualifiednamedElement> result = new HashSet<JSQualifiednamedElement>(); Collection<JSQualifiednamedElement> jsQualifiednamedElements = StubIndex.getElements(JavaScriptIndexKeys.ELEMENTS_BY_NAME,name,project,scope,JSQualifiednamedElement.class); for(JSQualifiednamedElement e : jsQualifiednamedElements) { result.add((JSQualifiednamedElement) e.getNavigationElement()); } Collection<VirtualFile> files = new ArrayList<VirtualFile>(); files.addAll(FileBasedindex.getInstance().getContainingFiles(FilenameIndex.NAME,name + JavaScriptSupportLoader.MXML_FILE_EXTENSION_DOT,scope)); files.addAll(FileBasedindex.getInstance().getContainingFiles(FilenameIndex.NAME,name + JavaScriptSupportLoader.MXML_FILE_EXTENSION2_DOT,scope)); for(final VirtualFile file : files) { if(!file.isValid()) { continue; } final PsiFile psiFile = PsiManager.getInstance(project).findFile(file); if(psiFile != null) { result.add(XmlBackedJSClassImpl.getXmlBackedClass((XmlFile) psiFile)); } } return result; }
public static String getQNametoStartHierarchySearch(final JSFunction node) { PsiElement parentNode = node.getParent(); parentNode = getClassReferenceForXmlFromContext(parentNode); if(parentNode instanceof JSClass) { final JSAttributeList attributeList = node.getAttributeList(); if(attributeList == null || !attributeList.hasModifier(JSAttributeList.ModifierType.OVERRIDE) || attributeList.hasModifier(JSAttributeList.ModifierType.STATIC) || attributeList.getAccesstype() == JSAttributeList.Accesstype.PRIVATE) { return null; } if(parentNode instanceof JSClass) { return ((JSClass) parentNode).getQualifiedname(); } } else if(node instanceof JSFunctionExpression && parentNode.getContainingFile().getLanguage() != JavaScriptSupportLoader.ECMA_SCRIPT_L4) { final ContextResolver resolver = new ContextResolver(node.getFirstChild()); return resolver.getQualifierAsstring(); } else if(parentNode instanceof JSFile && parentNode.getContainingFile().getLanguage() != JavaScriptSupportLoader.ECMA_SCRIPT_L4) { return node.getName(); } return null; }
public ImplicitJSVariableImpl(final String name,String qName,PsiFile containingFile) { super(containingFile.getManager(),JavaScriptSupportLoader.ECMA_SCRIPT_L4.getBaseLanguage()); myContainingFile = containingFile; myName = name; myType = qName; }
public static boolean isAdequatePlaceForImport(final PsiNamedElement parent,@NotNull PsiElement place) { if(parent instanceof JSFile && !parent.getLanguage().isKindOf(JavaScriptSupportLoader.ECMA_SCRIPT_L4)) { return false; } if(place instanceof JSReferenceExpression) { final PsiElement placeParent = place.getParent(); if(placeParent instanceof JSReferenceExpression) { final PsiElement currentParent = JSResolveUtil.getTopReferenceParent(placeParent); if(JSResolveUtil.isSelfReference(currentParent,place) || //currentParent instanceof JSDeFinitionExpression || currentParent instanceof JSReferenceList) { return false; } } } else if(place instanceof JSDocTagValue) { // further conditions to come } else { if(!(place instanceof JSFile)) { return false; } } return true; }
public static String getSignatureForParameter(final JSParameter p,boolean skipType) { final String s = skipType ? null : p.getTypestring(); if(s != null && s.length() > 0) { final boolean ecmal4 = p.getContainingFile().getLanguage() == JavaScriptSupportLoader.ECMA_SCRIPT_L4; String result; if(ecmal4) { if(p.isRest()) { result = "..."; } else { result = p.getName() + ":" + s; } } else { result = "[" + s + "] " + p.getName(); } final String initializerText = p.getinitializerText(); if(initializerText != null) { result += " = " + initializerText; } return result; } return p.getName(); }
protected static String getExceptionVarTypeBasedOnContext(@NotNull PsiElement context) { if(context.getContainingFile().getLanguage() == JavaScriptSupportLoader.ECMA_SCRIPT_L4) { return ":Error"; } return ""; }
@Override public void update(final AnActionEvent e) { final VirtualFile file = e.getData(PlatformDataKeys.VIRTUAL_FILE); boolean status = false; if(file != null) { if(file.getFileType() == JavaScriptFileType.INSTANCE) { final Editor editor = e.getData(PlatformDataKeys.EDITOR); final PsiFile psifile = e.getData(LangDataKeys.PSI_FILE); if(editor != null && psifile != null) { status = psifile.getLanguage() == JavaScriptSupportLoader.ECMA_SCRIPT_L4; } } else if(JavaScriptSupportLoader.isFlexMxmFile(file)) { status = true; } } e.getPresentation().setEnabled(status); e.getPresentation().setVisible(status); }
private static ProblemHighlightType getHighlightTypeForTypeOrSignatureProblem(@NotNull PsiElement node) { if(node.getContainingFile().getLanguage() == JavaScriptSupportLoader.ECMA_SCRIPT_L4) { return ProblemHighlightType.GENERIC_ERROR; } return ProblemHighlightType.GENERIC_ERROR_OR_WARNING; }
@Override protected JSExpression findIntroducedExpression(final PsiFile file,final int start,final int end,Editor editor) { if(file.getLanguage() != JavaScriptSupportLoader.ECMA_SCRIPT_L4) { CommonRefactoringUtil.showErrorHint(file.getProject(),JavaScriptBundle.message("javascript.introduce.field.error.not.available.in.javascript" + ".code"),getRefactoringName(),null); return null; } return super.findIntroducedExpression(file,start,end,editor); }
@Override public void processIntention(@NotNull PsiElement element) throws IncorrectOperationException { assert (element instanceof JSVarStatement); final JSVarStatement varStatement = (JSVarStatement) element; StringBuilder declarationBuffer = new StringBuilder(); List<String> initializations = new ArrayList<String>(); for (JSVariable variable : varStatement.getvariables()) { declarationBuffer.append((declarationBuffer.length() == 0) ? VAR_KEYWORD : ",") .append(variable.getName()); String s = JSPsiImplUtils.getTypeFromDeclaration(variable); final PsiFile containingFile = element.getContainingFile(); if (s == null && containingFile.getLanguage() == JavaScriptSupportLoader.ECMA_SCRIPT_L4) { s = JSResolveUtil.getExpressionType(variable.getinitializer(),containingFile); } if (s != null) { declarationBuffer.append(":").append(s); } if (variable.hasInitializer()) { initializations.add(variable.getName() + '=' + variable.getinitializer().getText() + ';'); } } declarationBuffer.append(';'); // Do replacement. Jsstatement newStatement = JSElementFactory.replaceStatement(varStatement,declarationBuffer.toString()); for (final String initialization : initializations) { newStatement = JSElementFactory.addStatementAfter(newStatement,initialization); } }
public static boolean isNewResolveAndCompletion(PsiFile psiFile) { return psiFile.getLanguage().isKindOf(JavaScriptSupportLoader.ECMA_SCRIPT_L4) || JavaScriptSupportLoader.isFlexMxmFile(psiFile); }
public ResolveProcessor(final String name,PsiElement _place) { myName = name; place = _place; final boolean b = place instanceof JSReferenceExpression && ((JSReferenceExpression) place).getQualifier() == null; allowUnqualifiedStaticsFromInstance = b; if(myName != null && place instanceof JSReferenceExpression) { final ASTNode node = place.getNode().findChildByType(JSTokenTypes.COLON_COLON); String explicitNs = null; // Todo: e.g. protected is also ns if(node != null) { final JSExpression expression = ((JSReferenceExpression) place).getQualifier(); if(expression instanceof JSReferenceExpression) { anyNsAllowed = ((JSReferenceExpression) expression).resolve() instanceof JSVariable; } explicitNs = expression != null ? expression.getText() : null; } else { final JSExpression qualifier = ((JSReferenceExpression) place).getQualifier(); if(qualifier instanceof JSReferenceExpression && qualifier.getNode().findChildByType(JSTokenTypes.COLON_COLON) != null) { anyNsAllowed = ((JSReferenceExpression) qualifier).resolve() instanceof JSVariable; explicitNs = ((JSReferenceExpression) qualifier).getReferencedname(); } } if(explicitNs != null && !anyNsAllowed) { openednses = new THashSet<String>(); openednses.add(explicitNs); defaultNsIsNotAllowed = true; } } if(myName == null && place instanceof JSReferenceExpression) { PsiElement parent = place.getParent(); if(parent instanceof JSReferenceList) { if(parent.getNode().getElementType() == JSElementTypes.EXTENDS_LIST) { final PsiElement element = parent.getParent(); if(element instanceof JSClass) { if(((JSClass) element).isInterface()) { myAcceptOnlyClasses = false; myAcceptOnlyInterfaces = true; } else { myAcceptOnlyClasses = true; myAcceptOnlyInterfaces = false; } } } else { myAcceptOnlyClasses = false; myAcceptOnlyInterfaces = true; } } } ecma = place != null && place.getContainingFile().getLanguage() == JavaScriptSupportLoader.ECMA_SCRIPT_L4; }
public static boolean isInlineComponentTag(XmlTag tag) { return COMPONENT_TAG_NAME.equals(tag.getLocalName()) && JavaScriptSupportLoader.isMxmlNs(tag.getNamespace()) && !(tag.getParent() instanceof XmlDocument); }
static ProblemHighlightType getUnresolveReferenceHighlightType(final @Nullable JSExpression qualifier,@NotNull JSExpression node) { JSClass jsClass; final PsiFile containingFile = node.getContainingFile(); if(qualifier != null) { jsClass = JSResolveUtil.findClassOfQualifier(qualifier,containingFile); if(jsClass == null && (qualifier instanceof JSReferenceExpression)) { ResolveResult[] results = ((JSReferenceExpression) qualifier).multiResolve(false); if(results.length != 0) { PsiElement resultElement = results[0].getElement(); String type = null; if(resultElement instanceof JSVariable) { type = ((JSVariable) resultElement).getTypestring(); } else if(resultElement instanceof JSFunction) { type = ((JSFunction) resultElement).getReturnTypestring(); } if("*".equals(type)) { return ProblemHighlightType.LIKE_UNKNowN_SYMBOL; } jsClass = JSResolveUtil.getClassOfContext(resultElement); } } } else { jsClass = JSResolveUtil.getClassOfContext(node); } final boolean ecmaL4File = containingFile.getLanguage() == JavaScriptSupportLoader.ECMA_SCRIPT_L4; if(jsClass != null && ecmaL4File && (!(jsClass instanceof XmlBackedJSClassImpl) || jsClass.getContainingFile().getFileType() == XmlFileType.INSTANCE)) { final JSAttributeList attributeList = jsClass.getAttributeList(); if(attributeList == null || !attributeList.hasModifier(JSAttributeList.ModifierType.DYNAMIC)) { return ProblemHighlightType.ERROR; } } if(ecmaL4File && jsClass == null && node.getParent() instanceof JSReferenceList) { return ProblemHighlightType.ERROR; } return ProblemHighlightType.LIKE_UNKNowN_SYMBOL; }
@Override public boolean supports(PsiFile file) { return file.getLanguage() == JavaScriptSupportLoader.ECMA_SCRIPT_L4 || JavaScriptSupportLoader.isFlexMxmFile(file); }
@Override protected ProblemHighlightType getProblemHighlightType(PsiElement location) { return location.getContainingFile().getLanguage() == JavaScriptSupportLoader.ECMA_SCRIPT_L4 ? ProblemHighlightType.GENERIC_ERROR:super.getProblemHighlightType(location); }
dalvik.system.BaseDexClassLoader.findClass中的java.lang.ClassNotFoundException
这个错误让我发疯.从Google Play商店下载时,我的应用在启动时崩溃并出现以下错误:
java.lang.classNotFoundException
in dalvik.system.BaseDexClassLoader.findClass
在我们的两个设备上使用eclipse构建时,我的应用程序不会崩溃.然而一个月前,一个客户使用他的手机构建我们的应用程序,然后它也在启动时崩溃.我忽略了这个问题,因为它正在我们的设备上工作,并认为它与谷歌地图键或密钥库有关.
现在,当从Play商店下载时,我们的应用程序崩溃了.我知道没有一种简单的方法可以解决这个问题,但是我们会理解正确的方向.
我也发现很难调试这个问题,因为在我们的设备上使用eclipse构建应用程序时效果很好!
这是我报告的完整错误日志:
java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.denederlandsewateren.winkeloord/com.denederlandsewateren.views.StartScreenActivity}: java.lang.classNotFoundException: com.denederlandsewateren.views.StartScreenActivity
at android.app.ActivityThread.performlaunchActivity(ActivityThread.java:2099)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2210)
at android.app.ActivityThread.access$600(ActivityThread.java:142)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1208)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4931)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:791)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:558)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.classNotFoundException: com.denederlandsewateren.views.StartScreenActivity
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:61)
at java.lang.classLoader.loadClass(ClassLoader.java:501)
at java.lang.classLoader.loadClass(ClassLoader.java:461)
at android.app.Instrumentation.newActivity(Instrumentation.java:1053)
at android.app.ActivityThread.performlaunchActivity(ActivityThread.java:2090)
... 11 more
再说一遍,除了对这个问题的直接回答,但也许有人可以对这个错误日志提供的问题有所了解.
编辑
如果有帮助,这是清单文件:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.xxxx.xxxxx"
android:versionCode="1"
android:versionName="1.0" >
<permission
android:name="com.xxxxx.xxxxx.MAPS_RECEIVE"
android:protectionLevel="signature" />
<permission
android:name="com.xxxxx.xxxxx.permission.C2D_MESSAGE"
android:protectionLevel="signature" />
<uses-permission android:name="my_app_package.permission.C2D_MESSAGE" />
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="com.xxxxxx.xxxxx.MAPS_RECEIVE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-feature
android:glEsversion="0x00020000"
android:required="true" />
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="17" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.VIBRATE" />
<application
android:allowBackup="true"
android:icon="@drawable/app_icon"
android:label="@string/app_name"
android:theme="@style/Theme.Sherlock" >
<service android:name="com.xxxxxx.xxxxx.GCMIntentService" />
<Meta-data
android:name="com.google.android.maps.v2.API_KEY"
android:value="xxxxxxxx" />
<receiver
android:name="com.google.android.gcm.GCMbroadcastReceiver"
android:permission="com.google.android.c2dm.permission.SEND" >
<intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
<action android:name="com.google.android.c2dm.intent.REGISTRATION" />
<category android:name="com.xxxxxx.xxxxxxx" />
</intent-filter>
</receiver>
<activity
android:name="com.xxxxx.xxxxx.MainActivity"
android:label="@string/app_name"
android:screenorientation="portrait">
<!--<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter> -->
</activity>
<Meta-data
android:name="com.facebook.sdk.ApplicationId"
android:value="@string/app_id" />
<activity android:name="com.facebook.LoginActivity" >
</activity>
<activity
android:name="com.xxxxxx.xxxxxx.StartScreenActivity"
android:label="@string/app_name"
android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen"
android:screenorientation="portrait">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
编辑
在设备上安装应用程序时添加了详细日志
03-30 17:56:28.554: D/dalvikvm(5150): GC_FOR_ALLOC freed 233K, 68% free 2639K/8195K, paused 13ms, total 13ms
03-30 17:56:28.574: I/dalvikvm-heap(5150): Grow heap (frag case) to 26.682MB for 16777232-byte allocation
03-30 17:56:28.594: D/dalvikvm(5150): GC_CONCURRENT freed <1K, 23% free 19022K/24647K, paused 2ms+9ms, total 21ms
03-30 17:56:29.114: D/dalvikvm(5150): GC_FOR_ALLOC freed 0K, 23% free 19022K/24647K, paused 15ms, total 15ms
03-30 17:56:29.129: I/dalvikvm-heap(5150): Grow heap (frag case) to 35.681MB for 9437200-byte allocation
03-30 17:56:29.169: D/dalvikvm(5150): GC_CONCURRENT freed 0K, 17% free 28238K/33927K, paused 2ms+2ms, total 38ms
03-30 17:56:29.254: D/libEGL(5150): loaded /system/lib/egl/libEGL_mali.so
03-30 17:56:29.259: D/libEGL(5150): loaded /system/lib/egl/libGLESv1_CM_mali.so
03-30 17:56:29.259: D/libEGL(5150): loaded /system/lib/egl/libGLESv2_mali.so
03-30 17:56:29.284: D/Openglrenderer(5150): Enabling debug mode 0
03-30 17:56:32.154: D/KEY(5150): UUID
03-30 17:56:32.179: I/System.out(5150): UUID: xxxxxxxxxxxxxx
03-30 17:56:32.179: E/SerializeObject(5150): FileNot Found in ReadSettings filename = xxxxx.dat
03-30 17:56:32.184: D/GCMRegistrar(5150): resetting backoff for com.xxxxx.xxxxx
03-30 17:56:32.214: V/GCMRegistrar(5150): Registering app com.xxxxx.xxxxx of senders 752727514714
03-30 17:56:32.214: D/KEY(5150): pushEnabled
03-30 17:56:32.324: V/SlidingMenu(5150): setting padding!
03-30 17:56:32.394: W/AllCapsTransformationMethod(5150): Caller did not enable length changes; not transforming text
03-30 17:56:32.394: W/AllCapsTransformationMethod(5150): Caller did not enable length changes; not transforming text
03-30 17:56:32.394: W/AllCapsTransformationMethod(5150): Caller did not enable length changes; not transforming text
03-30 17:56:32.409: W/AllCapsTransformationMethod(5150): Caller did not enable length changes; not transforming text
03-30 17:56:32.414: W/AllCapsTransformationMethod(5150): Caller did not enable length changes; not transforming text
03-30 17:56:32.414: W/AllCapsTransformationMethod(5150): Caller did not enable length changes; not transforming text
03-30 17:56:32.424: W/AllCapsTransformationMethod(5150): Caller did not enable length changes; not transforming text
03-30 17:56:32.424: W/AllCapsTransformationMethod(5150): Caller did not enable length changes; not transforming text
03-30 17:56:32.429: W/AllCapsTransformationMethod(5150): Caller did not enable length changes; not transforming text
03-30 17:56:32.434: W/AllCapsTransformationMethod(5150): Caller did not enable length changes; not transforming text
03-30 17:56:32.434: W/AllCapsTransformationMethod(5150): Caller did not enable length changes; not transforming text
03-30 17:56:32.434: W/AllCapsTransformationMethod(5150): Caller did not enable length changes; not transforming text
03-30 17:56:32.459: V/CustomViewBehind(5150): behind INVISIBLE
03-30 17:56:36.894: D/dalvikvm(5150): GC_CONCURRENT freed 20031K, 58% free 15574K/36551K, paused 4ms+7ms, total 49ms
03-30 17:56:36.894: D/dalvikvm(5150): WAIT_FOR_CONCURRENT_GC blocked 31ms
03-30 17:56:37.504: I/System.out(5150): Vaarapp ID: 5
03-30 17:56:37.534: I/Choreographer(5150): Skipped 122 frames! The application may be doing too much work on its main thread.
03-30 17:56:37.539: V/GCMbroadcastReceiver(5150): onReceive: com.google.android.c2dm.intent.REGISTRATION
03-30 17:56:37.544: V/GCMbroadcastReceiver(5150): GCM IntentService class: com.xxxxx.xxxxx.GCMIntentService
03-30 17:56:37.549: V/GCMBaseIntentService(5150): Acquiring wakelock
03-30 17:56:37.794: V/GCMBaseIntentService(5150): Intent service name: GCMIntentService-DynamicSenderIds-1
03-30 17:56:37.794: E/GCMRegistrar(5150): internal error: retry receiver class not set yet
03-30 17:56:37.794: V/GCMRegistrar(5150): Registering receiver
03-30 17:56:37.799: D/GCMBaseIntentService(5150): handleRegistration: registrationId = xxxxxxxxx-xxxxxxxx-xxxxxxxx-xxxxxx-xxxxx-xxxx, error = null, unregistered = null
03-30 17:56:37.799: D/GCMRegistrar(5150): resetting backoff for com.xxxxx.xxxxx
03-30 17:56:37.799: V/GCMRegistrar(5150): Saving regId on app version 1
03-30 17:56:37.829: V/GCMBaseIntentService(5150): Releasing wakelock
03-30 17:56:39.169: D/dalvikvm(5150): GC_CONCURRENT freed 2248K, 52% free 17830K/36551K, paused 6ms+12ms, total 95ms
03-30 17:56:39.169: D/dalvikvm(5150): WAIT_FOR_CONCURRENT_GC blocked 12ms
03-30 17:56:39.174: D/dalvikvm(5150): WAIT_FOR_CONCURRENT_GC blocked 48ms
03-30 17:56:41.164: I/dalvikvm(5150): Jit: resizing JitTable from 4096 to 8192
03-30 17:56:42.229: D/dalvikvm(5150): GC_CONCURRENT freed 4265K, 49% free 18778K/36551K, paused 3ms+6ms, total 58ms
03-30 17:56:42.229: D/dalvikvm(5150): WAIT_FOR_CONCURRENT_GC blocked 41ms
03-30 17:56:42.234: D/dalvikvm(5150): WAIT_FOR_CONCURRENT_GC blocked 46ms
03-30 17:57:51.759: D/dalvikvm(5150): GC_CONCURRENT freed 5476K, 49% free 18775K/36551K, paused 21ms+6ms, total 196ms
解决方法:
因此ProGuard确实从我的项目中剥离了代码.我使用ActionBarSherlock和facebook,这是我添加的,所以它会工作:
# ActionBarSherlock
-keep class android.support.** { *; }
-keep interface android.support.** { *; }
-keep class com.actionbarsherlock.** { *; }
-keep interface com.actionbarsherlock.** { *; }
# Keep line numbers to alleviate debugging stack traces
-renamesourcefileattribute SourceFile
-keepattributes SourceFile,LineNumberTable
这适用于Facebook:
-keepclassmembers class * implements java.io.Serializable
{
private static final java.io.ObjectStreamField[] serialPersistentFields;
private void writeObject(java.io.ObjectOutputStream);
private void readobject(java.io.ObjectInputStream);
java.lang.Object writeReplace();
java.lang.Object readResolve();
}
关于跨ClassLoader的Java 8 ScriptEngine和java跨类调用的介绍现已完结,谢谢您的耐心阅读,如果想了解更多关于android – dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:61)中的类加载错误?、ClassLoader.loadClass() throws java.lang.ClassNotFoundException、com.intellij.lang.javascript.JavaScriptSupportLoader的实例源码、dalvik.system.BaseDexClassLoader.findClass中的java.lang.ClassNotFoundException的相关知识,请在本站寻找。
本文标签: