在codenameone中,当在枚举上使用valueOf(String s)抛出IllegalArgument异常:在iPhone5,iOS9上没有枚举const,但在模拟器和Android上工作正常。它在3-4周前工作得很好。在文本框中键入OK,然后在模拟器上按下按钮,如果你构建并运行iOS9,你将获得例外。
用于测试的快照代码:
public class MyApplication {
private Form current;
private Resources theme;
enum popo { OK, ERROR,EXCEPTION};
public void init(Object context) {
theme = UIManager.initFirstTheme("/theme");
// Pro only feature, uncomment if you have a pro subscription
// Log.bindCrashProtection(true);
}
public void start() {
if(current != null){
current.show();
return;
}
Form hi = new Form("Hi World");
hi.setLayout(new BorderLayout());
final TextArea input = new TextArea();
Button testr = new Button("Touch me");
testr.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
popo q = popo.valueOf(input.getText());
Dialog.show("title",
"just found string = "+input.getText()+" \nthat gives enum = "+q.toString()
, "OK", null);
}
});
hi.addComponent(BorderLayout.CENTER, input);
hi.addComponent(BorderLayout.SOUTH,testr);
hi.show();
}
public void stop() {
current = Display.getInstance().getCurrent();
}
public void destroy() {
}
}
非常感谢, 戈兰。
答案 0 :(得分:0)
Enum的values()
及相关电话未在Codename One中实施。问题的关键在于它们在混淆期间失败(对于Android)并且需要一些由javac
工具生成的反射代码。
解决方法是使用以下内容:
enum popo {OK("OK"), ERROR("ERROR),EXCEPTION("EXCEPTION");
public popo(String value) {
this.value = value;
}
String value;
};
然后使用myPopo.value
。