我在这里使用我的API代码:
package org.midnightas.os.game.dots;
import java.awt.Graphics2D;
import org.midnightas.os2.Key;
import org.midnightas.os2.MidnightasOS;
import org.midnightas.os2.gameapi.Game;
public class Dots extends Game {
public Dots(MidnightasOS midnightasos) {
super(midnightasos);
}
@Override
public void init() {
}
@Override
public void keyPressed(Key arg0) {
}
@Override
public void render(Graphics2D arg0) {
}
@Override
public void tick() {
}
static {
System.out.println("MOS Dots crashed.");
MidnightasOS.setGame(Dots.class);
}
}
静态块应该运行调用MidnightasOS.setGame(Class); 然而,这种情况并没有发生 我也使用System.out调试无济于事 MidnightasOS中存在问题吗?如有必要,我会发布它的代码。
我这样做是因为我正在尝试使用Linux和Raspberry PI创建一个仿真操作系统。
这应该是像Game Boy一样的游戏机
我正在尝试加载所有Game类,因此至少其中一个会使用MidnightasOS.setGame(Class);
感谢阅读。
答案 0 :(得分:3)
类加载器何时加载Dots类。它将加载到此类的第一个引用。看看你是否参考过这个课程
You can even dynamically load the class 要查找类的所有子类型并加载它们,您可以使用this library
public class MainClass {
public static void main(String[] args){
ClassLoader classLoader = MainClass.class.getClassLoader();
Reflections reflections = new Reflections("org.midnightas");
Set<Class<? extends Game>> subTypes = reflections.getSubTypesOf(Game.class);
for(Class<? extends Game> subType : subTypes){
try {
Class aClass = classLoader.loadClass(subType);
System.out.println("subType.getName() = " + subType.getName());
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}
答案 1 :(得分:2)
类加载器第一次加载类时,就会执行类中的静态块。实现这一目标有几种可能性。考虑以下课程:
public class SomeClass {
static {
System.out.println("static block in SomeClass");
}
static void someMethod() {
System.out.println("some static method");
}
}
SomeClass foo = new SomeClass();
SomeClass.someMethod();
Class.forName("SomeClass");
这些只是你拥有的一些可能性!请注意,您必须将包结构包含在第三种方法中(如果该类在包中,则包含在内。包装将是:Class.forName("some.package.SomeClass");