Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
对SWT更新异常的JavaFX调用_Java_Eclipse_Javafx - Fatal编程技术网

对SWT更新异常的JavaFX调用

对SWT更新异常的JavaFX调用,java,eclipse,javafx,Java,Eclipse,Javafx,我有一个键盘模拟类,它有一个基于语音识别输入自动输入Eclipse编辑器的方法。这是正确的 我还有一些用JavaFX制作的表,其中用户单击一个元素,并且使用相同的方法在屏幕上模拟该元素 但是,我得到了“线程中的异常”JavaFX应用程序线程“java.lang.NullPointerException”异常。只有当JavaFX线程调用该方法来更新Eclipse编辑器时,语音识别部分才会出现这种情况 将数据打印到eclipse文本编辑器的键盘模拟方法 private void doType(in

我有一个键盘模拟类,它有一个基于语音识别输入自动输入Eclipse编辑器的方法。这是正确的

我还有一些用JavaFX制作的表,其中用户单击一个元素,并且使用相同的方法在屏幕上模拟该元素

但是,我得到了“线程中的异常”JavaFX应用程序线程“java.lang.NullPointerException”异常。只有当JavaFX线程调用该方法来更新Eclipse编辑器时,语音识别部分才会出现这种情况

将数据打印到eclipse文本编辑器的键盘模拟方法

 private void doType(int[] keyCodes, int offset, int length) {
    if (length == 0) {
        return;
    }

    //Since we are in a loop, we must only emulate the mouse press on the eclipse
    //text editors last known location to avoid every letter getting mixed up
    correctCaretPosition++;


        Display.getDefault().syncExec(new Runnable() {
        public void run() { 

            System.out.println("fwefwefwef\n\n\n\n\n\n" + myEditor.PROP_DIRTY);

            Control control = myEditor.getAdapter(Control.class);
            //Only when the click to bring eclipse into scope has not happened
            if (control instanceof StyledText && correctCaretPosition <= 1) {
                  StyledText text = (StyledText)control;

                  // Position of caret relative to top left of the control
                  Point relPos = text.getLocationAtOffset(text.getCaretOffset()); 

                  // Position relative to display
                  Point absPos = text.toDisplay(relPos); 
                  System.out.println(absPos.x + "  " +absPos.y);
                  robot.mouseMove(absPos.x, absPos.y);
                  robot.mousePress(BUTTON1_MASK);
                  robot.mouseRelease(BUTTON1_MASK);
                }

        robot.keyPress(keyCodes[offset]);
        doType(keyCodes, offset + 1, length - 1);
        robot.keyRelease(keyCodes[offset]);
              }
        });

    }
错误来自这一行

Control control = myEditor.getAdapter(Control.class);
在此上下文中,Robot是Keybooard仿真对象。 我是否完全错误地理解了两者之间的并发性

更新:

错误的根源是

Control control = myEditor.getAdapter(Control.class);
我从应用程序的一开始就传入了控件,没有错误,但是,没有发生任何事情,因为我认为控件不能满足需要

if (control instanceof StyledText && correctCaretPosition <= 1) {

是否可以查看错误的堆栈跟踪?它应该突出关注的领域。这里很难判断空引用异常是来自robot、数据还是控制。或者在getAdapter()调用中的某个地方。runLater调用可能也会引起问题,如果在调用时没有实例化某些东西。当不涉及JavaFX时,一切都正常工作,所以我不会认为它是一个空引用,比如说……当然,它是一个空指针异常,正在冒泡,尽管这可能是欺骗。似乎源于
table.symbol.SymbolTableController$1.handle()
方法。我会在代码中加入一些调试语句,以检查各种相关值是否存在空值。这也可能是JavaFX所使用的各种线程之间的并发性问题,但我从这里开始,它应该让您知道下一步应该去哪里;哪个是SWT小部件?是的,如果您混合使用SWT和JavaFX,这当然是可能的。
if (control instanceof StyledText && correctCaretPosition <= 1) {
Exception in thread "JavaFX Application Thread" 
!ENTRY org.eclipse.ui 4 0 2016-02-24 16:36:49.413
!MESSAGE Unhandled event loop exception
org.eclipse.swt.SWTException: Failed to execute runnable (java.lang.NullPointerException)
at org.eclipse.swt.SWT.error(SWT.java:4491)
at org.eclipse.swt.SWT.error(SWT.java:4406)
at org.eclipse.swt.widgets.Synchronizer.syncExec(Synchronizer.java:208)
at org.eclipse.ui.internal.UISynchronizer.syncExec(UISynchronizer.java:145)
at org.eclipse.swt.widgets.Display.syncExec(Display.java:4761)
at voice.recognition.Keyboard_Emulation.doType(Keyboard_Emulation.java:204)
at voice.recognition.Keyboard_Emulation.doType(Keyboard_Emulation.java:191)
at voice.recognition.Keyboard_Emulation.type(Keyboard_Emulation.java:174)
at voice.recognition.Keyboard_Emulation.type(Keyboard_Emulation.java:69)
at table.symbol.SymbolTableController$1$1.run(SymbolTableController.java:92)
at com.sun.javafx.application.PlatformImpl.lambda$null$173(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.application.PlatformImpl.lambda$runLater$174(Unknown Source)
at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(Unknown Source)
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at com.sun.glass.ui.win.WinApplication.lambda$null$148(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.NullPointerException
at voice.recognition.Keyboard_Emulation$1.run(Keyboard_Emulation.java:208)
at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35)
at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:135)
at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:4155)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3772)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$4.run(PartRenderingEngine.java:1127)
at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:337)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1018)
at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:156)
at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:654)
!STACK 0
org.eclipse.swt.SWTException: Failed to execute runnable (java.lang.NullPointerException)
at org.eclipse.swt.SWT.error(SWT.java:4491)
at org.eclipse.swt.SWT.error(SWT.java:4406)
at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:138)
at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:4155)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3772)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$4.run(PartRenderingEngine.java:1127)
at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:337)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1018)
at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:156)
at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:654)
at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:337)
at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:598)
at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150)
at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:139)
at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:134)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:104)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:380)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:235)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:669)
at org.eclipse.equinox.launcher.Main.basicRun(Main.java:608)
at org.eclipse.equinox.launcher.Main.run(Main.java:1515)
at org.eclipse.equinox.launcher.Main.main(Main.java:1488)
Caused by: java.lang.NullPointerException
at voice.recognition.Keyboard_Emulation$1.run(Keyboard_Emulation.java:208)
at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35)
at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:135)
... 24 more
at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:337)
at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:598)
at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150)
at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:139)
at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:134)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:104)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:380)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:235)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:669)
at org.eclipse.equinox.launcher.Main.basicRun(Main.java:608)
at org.eclipse.equinox.launcher.Main.run(Main.java:1515)
at org.eclipse.equinox.launcher.Main.main(Main.java:1488)