我正在尝试编写一个需要一致的字符串输入的程序。为此,我将用户给定的字符串和先前给定的字符串数组(初始化为1000)放入函数中,并进行比较,然后根据需要进行更正。当我运行程序时,某些字符串可以工作并且NullPointerExceptions(两者都可以)。
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at main.Utils.isSimilar(Utils.java:17)
at app.GUI$2.mouseClicked(GUI.java:178)
at java.awt.AWTEventMulticaster.mouseClicked(AWTEventMulticaster.java:270)
at java.awt.Component.processMouseEvent(Component.java:6536)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)
at java.awt.Component.processEvent(Component.java:6298)
at java.awt.Container.processEvent(Container.java:2236)
at java.awt.Component.dispatchEventImpl(Component.java:4889)
at java.awt.Container.dispatchEventImpl(Container.java:2294)
at java.awt.Component.dispatchEvent(Component.java:4711)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4888)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4534)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4466)
at java.awt.Container.dispatchEventImpl(Container.java:2280)
at java.awt.Window.dispatchEventImpl(Window.java:2746)
at java.awt.Component.dispatchEvent(Component.java:4711)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
at java.awt.EventQueue.access$500(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:709)
at java.awt.EventQueue$3.run(EventQueue.java:703)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:90)
at java.awt.EventQueue$4.run(EventQueue.java:731)
at java.awt.EventQueue$4.run(EventQueue.java:729)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
我不知道为什么它无法正常运行。该程序正在用Java 1.8.0编译,我正在测试在Mac OS Mojave上运行它。我究竟做错了什么?这是所有相关代码: GUI.java:
private String[] allImageObjects = new String[1000];//Basically the category
进一步
public GUI(String title, JFrame window) {
window = new JFrame(title);
window.setSize(600, 500);
window.setPreferredSize(new Dimension(600, 500));;
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
window.setResizable(false);
window.setLocationRelativeTo(null);
window.setUndecorated(true);
for(int i = 0; i < allImageObjects.length; i++) {
allImageObjects[0] = "Null";
}
init(window);
window.setVisible(true);
window.pack();
window.setLocationRelativeTo(null);
}
在init();
JButton btnNext = new JButton("Next");
btnNext.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
String checkString = (textField.getText());
if(checkString == "") {
return;
}
for(final String compString : allImageObjects) {
if(Utils.isSimilar(compString, checkString, 0.1)) {
JFrame popup = new JFrame();
popup.setType(Type.POPUP);
popup.setResizable(false);
popup.setVisible(true);
System.out.println("Eaquel");
return;
}
}
int totalObjects = 0;
for (int i = 0; i < allImageObjects.length; i ++) {
if (allImageObjects[i] != null) {
totalObjects ++;
}
}
allImageObjects[totalObjects + 1] = textField.getText();
}
});
并在Utils.java中:
public static boolean isSimilar(String one, String two, double aR) {
int difference = one.compareToIgnoreCase(two);
char[] onec = one.toLowerCase().toCharArray();
char[] twoc = two.toLowerCase().toCharArray();
//Averages
double stringOneAve = 0.0;
double stringTwoAve = 0.0;
double totalAve;
for (int i = 0; i < onec.length; i++){
stringOneAve += onec[i] - '0';
}
stringOneAve /= onec.length;
for (int i = 0; i < twoc.length; i++){
stringTwoAve += twoc[i] - '0';
}
stringTwoAve /= twoc.length;
totalAve = (stringOneAve + stringTwoAve) / 2;
int acceptaceRate = (int)(aR * totalAve);
if(difference < 0 + (acceptaceRate / 2) && difference > 0 - (acceptaceRate / 2)){
return true;
}
return false;
}