Eclipseエディタでアクティブなページを取得する必要があります。どのように私はこの問題を解決することができますeclipseプラグインでアクティブなページを取得するにはどうすればよいですか?
java.lang.NullPointerException
at kr.ac.jbnu.ssel.instantfeedback.views.InstantFeedbackView$1.elementChanged(InstantFeedbackView.java:136)
at org.eclipse.jdt.internal.core.DeltaProcessor$3.run(DeltaProcessor.java:1662)
at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
at org.eclipse.jdt.internal.core.DeltaProcessor.notifyListeners(DeltaProcessor.java:1652)
at org.eclipse.jdt.internal.core.DeltaProcessor.fireReconcileDelta(DeltaProcessor.java:1504)
at org.eclipse.jdt.internal.core.DeltaProcessor.fire(DeltaProcessor.java:1463)
at org.eclipse.jdt.internal.core.JavaModelOperation.run(JavaModelOperation.java:765)
at org.eclipse.jdt.internal.core.JavaModelOperation.runOperation(JavaModelOperation.java:790)
at org.eclipse.jdt.internal.core.CompilationUnit.reconcile(CompilationUnit.java:1250)
at org.eclipse.jdt.internal.ui.text.java.JavaReconcilingStrategy.reconcile(JavaReconcilingStrategy.java:128)
at org.eclipse.jdt.internal.ui.text.java.JavaReconcilingStrategy.access$0(JavaReconcilingStrategy.java:110)
at org.eclipse.jdt.internal.ui.text.java.JavaReconcilingStrategy$1.run(JavaReconcilingStrategy.java:90)
at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
at org.eclipse.jdt.internal.ui.text.java.JavaReconcilingStrategy.reconcile(JavaReconcilingStrategy.java:87)
at org.eclipse.jdt.internal.ui.text.java.JavaReconcilingStrategy.reconcile(JavaReconcilingStrategy.java:154)
at org.eclipse.jdt.internal.ui.text.CompositeReconcilingStrategy.reconcile(CompositeReconcilingStrategy.java:89)
at org.eclipse.jdt.internal.ui.text.JavaCompositeReconcilingStrategy.reconcile(JavaCompositeReconcilingStrategy.java:104)
at org.eclipse.jface.text.reconciler.MonoReconciler.process(MonoReconciler.java:73)
at org.eclipse.jface.text.reconciler.AbstractReconciler$BackgroundThread.run(AbstractReconciler.java:207)
:?私はこのコードを使用する場合
IWorkbench wb = PlatformUI.getWorkbench();
IWorkbenchWindow win = wb.getActiveWorkbenchWindow();
IWorkbenchPage page = win.getActivePage();
ITextEditor editor = (ITextEditor) page.getActiveEditor();
しかし、それは次のようなエラーメッセージを生成します。私はそれをGoogleで検索すると、私は以下のコードが見つかりましたか
追加 これは私のelementChanged()関数です。それは方法にある。
private void addListenerToCheckChange_save() {
JavaCore.addElementChangedListener(new IElementChangedListener() {
@Override
public void elementChanged(ElementChangedEvent event) {
IWorkbench wb = PlatformUI.getWorkbench();
IWorkbenchWindow win = wb.getActiveWorkbenchWindow();
IWorkbenchPage page = win.getActivePage();
ITextEditor editor = (ITextEditor) page.getActiveEditor();
IJavaElement javaElement = JavaUI.getEditorInputJavaElement(editor.getEditorInput());
if (javaElement instanceof ICompilationUnit) {
ITextSelection sel = (ITextSelection) editor.getSelectionProvider().getSelection();
IJavaElement selected = null;
try {
...
} catch (JavaModelException JME) {
JME.printStackTrace();
}
}
}
});
}
私はビュークラスでIElementChangedListenerを実装するように修正しようとしました。これは修正されたものです。あなたのコードがスレッドで実行されているためです
IWorkbenchWindow win = wb.getActiveWorkbenchWindow();
:
@Override
public void elementChanged(ElementChangedEvent arg0) {
Display.getCurrent().asyncExec(new Runnable() {
@Override
public void run() {
IWorkbench wb = PlatformUI.getWorkbench();
IWorkbenchWindow win = wb.getActiveWorkbenchWindow();
IWorkbenchPage page = win.getActivePage();
ITextEditor editor = (ITextEditor) page.getActiveEditor();
IJavaElement javaElement = JavaUI.getEditorInputJavaElement(editor.getEditorInput());
if (javaElement instanceof ICompilationUnit) {
ITextSelection sel = (ITextSelection) editor.getSelectionProvider().getSelection();
IJavaElement selected = null;
try {
...
} catch (JavaModelException JME) {
JME.printStackTrace();
}
}
}
});
}
はしかし、あなたがからアクティブなワークベンチ・ウィンドウにnullを取得している1が...
コードスニペットは、現在アクティブなエディタを取得するための正しいコードです。ポストされたスタックトレースはスニペットには関係しません。 'wb = PlatformUI.getWorkbench();'にブレークポイントを設定し、コードをデバッグする。 –
このエラーは、私がwin.getActivePage()を実行したときに発生します。 – user3649231