我尝试实例化以下Java代码中定义的内部类:
public class Mother {
public class Child {
public void doStuff() {
// ...
}
}
}
Run Code Online (Sandbox Code Playgroud)
当我试图像这样得到一个Child的实例
Class<?> clazz= Class.forName("com.mycompany.Mother$Child");
Child c = clazz.newInstance();
Run Code Online (Sandbox Code Playgroud)
我得到这个例外:
java.lang.InstantiationException: com.mycompany.Mother$Child
at java.lang.Class.newInstance0(Class.java:340)
at java.lang.Class.newInstance(Class.java:308)
...
Run Code Online (Sandbox Code Playgroud)
我错过了什么?
当我通过App-Change按钮再次打开一个关闭的应用程序时,我收到此错误消息:
Caused by: java.lang.InstantiationException: can't instantiate class com.*.FragmentContact$1; no empty constructor
Run Code Online (Sandbox Code Playgroud)
我已经找到了几个关于Inner-Classes的技巧并使它们成为静态等等.但是这个FragmentContact是一个*.java文件中的公共类,并且有一个公共的空构造函数.我在这个项目中使用谷歌地图Api v2,并在互联网上的某个地方设置我的MapView.看这里:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_contact, null);
try {
MapsInitializer.initialize(this.getActivity().getApplicationContext());
} catch (GooglePlayServicesNotAvailableException e) {
e.printStackTrace();
}
fragment = new SupportMapFragment() {
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
mMap = fragment.getMap();
if (mMap != null) {
setupMap();
}
}
};
getFragmentManager().beginTransaction().replace(R.id.fragment_orte_map_parent, fragment).commit();
return v;
}
Run Code Online (Sandbox Code Playgroud)
当我剪切这个MapView东西时,一切正常.也许有人可以解释我做错了什么.
我完整的Stacktrace:
FATAL EXCEPTION: main
java.lang.RuntimeException: Unable …
Run Code Online (Sandbox Code Playgroud) 我有一个抽象的A类,即
public abstract class A {
private final Object o;
public A(Object o) {
this.o = o;
}
public int a() {
return 0;
}
public abstract int b();
}
Run Code Online (Sandbox Code Playgroud)
我有一个子类B,即
public class B extends A {
public B(Object o) {
super(o);
}
@Override
public int a() {
return 1;
}
@Override
public int b() {
return 2;
}
}
Run Code Online (Sandbox Code Playgroud)
我正在执行以下代码:
Constructor c = B.class.getDeclaredConstructor(Object.class);
B b = (B) c.newInstance(new Object());
Run Code Online (Sandbox Code Playgroud)
并且在调用newInstance时获得InstantiationException,更具体地说:
java.lang.InstantiationException
at sun.reflect.InstantiationExceptionConstructorAccessorImpl.newInstance(InstantiationExceptionConstructorAccessorImpl.java:30)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
Run Code Online (Sandbox Code Playgroud)
我不知道为什么我收到例外.我已经查看了一些其他类似的问题,并在调用超级构造函数或者父类的抽象性质的问题时看到了有关最终变量用法的事情,但我找不到为什么这种特殊情况抛出InstantiationException的明确答案.有任何想法吗?
我正在玩一些代码来制作一个"封闭式"构造(不工作顺便说一句)
一切看起来都不错但是当我尝试访问代码中的最终局部变量时,InstantiationException
抛出了异常.
如果我通过完全删除局部变量或通过改为使用类属性来删除对局部变量的访问,则不会发生异常.
当应用程序尝试使用类Class中的newInstance方法创建类的实例时抛出,但无法实例化指定的类对象.实例化可能由于各种原因而失败,包括但不限于:
- 类对象表示抽象类,接口,数组类,基元类型或void
- 该类没有空构造函数
还有什么其他原因可能导致这个问题?
这是代码.注释/取消注释类属性/局部变量以查看效果(行:5和10).
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
class InstantiationExceptionDemo {
//static JTextField field = new JTextField();// works if uncommented
public static void main( String [] args ) {
JFrame frame = new JFrame();
JButton button = new JButton("Click");
final JTextField field = new JTextField();// fails if uncommented
button.addActionListener( new _(){{
System.out.println("click " + field.getText());
}});
frame.add( field );
frame.add( button, BorderLayout.SOUTH );
frame.pack();frame.setVisible( true );
}
} …
Run Code Online (Sandbox Code Playgroud) 我的理解是,已检查的例外是那些可以合理地预期从中恢复的人.我不明白为什么这是InstantiationException的情况.如果一个类无法实例化,那么调用者应该做什么?
然后我认为这可能是代码编译时的一个重要考虑因素 - 因此只有在动态指定类时才会发生这种情况.1 在这种情况下,类可能更像是一个参数,但是我们有IllegalArgumentException,它是一个运行时异常.
检查标准异常的理由是什么,哪些不是?
1这是真的吗?
我在一个Music
类中的媒体播放器从另一个辅助节点调用Activity
.它工作正常.
但是当屏幕熄灭时(通过超时或按钮),音乐停止播放,当回来并尝试关闭活动时,程序进入"应用程序无响应",因为IllegalStateException
在查询时如此mediaplayer.isPlaying()
.
如何在屏幕关闭时阻止媒体播放器停止?
它必须通过服务?
假设答案是肯定的,我试图将Music
类转换为服务(见下文).我也加入<service android:enabled="true" android:name=".Music" />
了Manifest.xml
,我正在调用这样的Music
类:
startService(new Intent(getBaseContext(), Music.class));
Music track = Music(fileDescriptor);
Run Code Online (Sandbox Code Playgroud)
主Activity中只有2个新行startService(new Intent(getBaseContext(), Music.class));
和stopService(new Intent(getBaseContext(), Music.class));
,以及相应的导入.
但现在我得到InstantiationException
错误,因为can't instantiate class
在尝试启动服务时.我错过了什么?
这是例外:
E/AndroidRuntime(16642): FATAL EXCEPTION: main
E/AndroidRuntime(16642): java.lang.RuntimeException: Unable to instantiate service com.floritfoto.apps.ave.Music: java.lang.InstantiationException: can't instantiate class com.floritfoto.apps.ave.Music; no empty constructor
E/AndroidRuntime(16642): at android.app.ActivityThread.handleCreateService(ActivityThread.java:2249)
E/AndroidRuntime(16642): at android.app.ActivityThread.access$1600(ActivityThread.java:127)
E/AndroidRuntime(16642): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1213)
E/AndroidRuntime(16642): at android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime(16642): …
Run Code Online (Sandbox Code Playgroud) 我正在使用SAX解析XML文件,但是当我在类上调用类加载器时,java.lang.InstantiationException
会抛出a。
我通过例外的原因对此进行了调试:“当应用程序尝试使用Class类中的newInstance方法创建类的实例时抛出,但是指定的类对象由于是接口或抽象类而无法实例化。 '
但是location
该类不是接口或抽象类。我还检查了该类是否在正确的包中。
有谁知道为什么在这种情况下会引发异常?
只是在Parser类的startElement中的第一个println之后引发异常:
public void startElement(String namespaceURI, String localName, String qName, Attributes atts) throws SAXException {
if (qName.equals("location")){
location = true;
System.out.println("Found a location...");
//exception thrown after this statement as shown
//in the error output below
try {
//Read in the values for the attributes of the element <location>
int locationID = Integer.parseInt(atts.getValue("id"));
String locationName = atts.getValue("name");
//Generate a new instance of Location on-the-fly using reflection. The statement Class.forName("gmit.Location").newInstance(); invokes the
//Java Class …
Run Code Online (Sandbox Code Playgroud) 我有一个BroadcastReceiver的问题.如果我以这种方式在清单中声明操作:
<receiver android:name="com.app.activity.observer.DataEntryObserver" >
<intent-filter>
<action android:name= "@string/action_db_updated" />
</intent-filter>
</receiver>
Run Code Online (Sandbox Code Playgroud)
我在strings.xml中的位置:
<string name="action_db_updated">com.app.DB_UPDATED</string>
Run Code Online (Sandbox Code Playgroud)
一切顺利.但是,如果我将其更改为:
<receiver android:name="com.app.activity.observer.DataEntryObserver" >
<intent-filter>
<action android:name= "com.app.DB_UPDATED" />
</intent-filter>
</receiver>
Run Code Online (Sandbox Code Playgroud)
我有这个例外,因为接收器被调用:
java.lang.RuntimeException:无法实例化接收器com.app.activity.observer.DataEntryObserver:java.lang.InstantiationException:无法实例化类com.app.activity.observer.DataEntryObserver; 没有空的构造函数
我会保留工作版本,但Play商店不允许我发布应用程序,因为它需要一个字符串值而不是变量@ string/..
我的接收器是一个外部类,定义为:
public class DataEntryObserver extends BroadcastReceiver{
private AppUsageLoader dLoader;
public DataEntryObserver(AppUsageLoader dLoader) {
this.dLoader = dLoader;
IntentFilter filter = new IntentFilter(
ReaLifeApplication.ACTION_DB_UPDATED);
dLoader.getContext().registerReceiver(this, filter);
}
@Override
public void onReceive(Context arg0, Intent arg1) {
// Tell the loader about the change.
dLoader.onContentChanged();
}
Run Code Online (Sandbox Code Playgroud)
}
java android exception broadcastreceiver instantiationexception
我有一个项目,我最初使用Android Studio开发.我决定将它转换为Xamarin(Visual Studio 2015).
在将所有代码移植几个小时之后,除了我的设置活动(PreferenceActivity)之外,一切都有效.我有一些构成设置的PreferenceFragments,但是所有这些都让我"无法实例化片段".以下是我得到的例外情况:
Java.Lang.RuntimeException:无法启动活动ComponentInfo {test.mypackagename/md50d00e677e41fc49f8b3c16e79df2b77f.SettingsActivity}:android.app.Fragment $ InstantiationException:无法实例化片段test.mypackagename.GeneralPreferenceFragment:确保类名存在,是公共的,并且具有一个公共的空构造函数
我一直在网上寻找解决方案,但我似乎无法找到一个.无论我到哪里,他们都会说确保有一个空的公共构造函数,如果它是一个内部类,它必须是静态的.但我有空的构造函数,而不是内部类,它在自己的文件中.
这是我的SettingsActivity.cs:
namespace test.mypackagename
{
public class SettingsActivity : PreferenceActivity
{
protected override void OnPostCreate(Bundle savedInstanceState)
{
base.OnPostCreate(savedInstanceState);
}
public override void OnBuildHeaders(IList<Header> target)
{
LoadHeadersFromResource(Resource.Xml.pref_headers, target);
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的GeneralPreferenceFragment.cs:
namespace test.mypackagename
{
public class GeneralPreferenceFragment : PreferenceFragment
{
public GeneralPreferenceFragment() { }
public override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
AddPreferencesFromResource(Resource.Xml.pref_general);
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的pref_headers.xml:
<preference-headers xmlns:android="http://schemas.android.com/apk/res/android">
<header android:fragment="test.mypackagename.GeneralPreferenceFragment"
android:title="@string/pref_header_general" />
<header android:fragment="test.mypackagename.OtherPreferenceFragment1"
android:title="@string/pref_header_other1" />
<header android:fragment="test.mypackagename.OtherPreferenceFragment2"
android:title="@string/pref_header_other2" />
<header …
Run Code Online (Sandbox Code Playgroud) 我写了自己的客户转换器:
public class MyFancyCustomConverter extends DozerConverter<Integer, AnObject>
{
public MyFancyCustomConverter(Class<Integer> prototypeA, Class<AnObject> prototypeB)
{
super(prototypeA, prototypeB);
}
@Override
public AnObject convertTo(Integer source, AnObject destination)
{
// TODO: do something
return null;
}
@Override
public Integer convertFrom(AnObject source, Integer destination)
{
// TODO: do something
return 0;
}
}
Run Code Online (Sandbox Code Playgroud)
我的mapping.xml:
<mapping>
<class-a>java.lang.Integer</class-a>
<class-b>xyz.AnObject</class-b>
<field custom-converter="xyz.MyFancyCustomConverter" custom-converter-param="hello">
<a>this</a>
<b key="my.key">this</b>
</field>
</mapping>
Run Code Online (Sandbox Code Playgroud)
但是我得到了这个例外:
org.dozer.MappingException:java.lang.InstantiationException:xyz.MyFancyCustomConverter
知道我做错了什么吗?我想这是因为MyFancyCustomConverter没有默认转换器.但我不能添加一个,因为DozerConverter没有...
java ×6
android ×4
exception ×2
reflection ×2
classloader ×1
constructor ×1
converter ×1
dozer ×1
fragment ×1
mapping ×1
media-player ×1
sax ×1
screen ×1
xamarin ×1
xml ×1