NPE в DebugPlugin.getDefault()

У меня есть следующий кусок кода:

import java.io.BufferedReader;

import java.io.FileReader;
import java.io.IOException;

import org.eclipse.core.runtime.CoreException;
import org.eclipse.debug.core.DebugPlugin;
import org.eclipse.debug.core.ILaunchConfiguration;
import org.eclipse.debug.core.ILaunchConfigurationType;
import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
import org.eclipse.debug.core.ILaunchManager;
import org.eclipse.debug.ui.DebugUITools;


public class Main {
    public static void main(String... strings) throws IOException {
        try {
            String path = "E:\\Java\\Projects\\.metadata\\.plugins\\org.eclipse.debug.core\\.launches\\MedicineFrame.launch";

            ILaunchManager launchManager = DebugPlugin.getDefault()
                    .getLaunchManager();
            ILaunchConfigurationType type = launchManager
                    .getLaunchConfigurationType(ILaunchManager.RUN_MODE);
            ILaunchConfigurationWorkingCopy workingCopy = type.newInstance(
                    null, path);
            workingCopy.setAttribute("PATH_MY", path);
            ILaunchConfiguration configuration = workingCopy.doSave();
            DebugUITools.launch(configuration, ILaunchManager.RUN_MODE);
        } catch (CoreException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }}

На самом деле, я просто хочу запустить конфигурацию запуска, указанную в файле с абсолютным путем. Я получаю NPE, потому что DebugPlugin.getDefault() возвращает ноль. Что я должен делать? Я нашел много подобных примеров, но ни один из них не рассказывает о NPE, как никто никогда не получал его до меня.

1 ответ

Решение

После быстрого просмотра кода DebugPlugin я обнаружил, что DebugPlugin#getDefault() метод простой метод получения fgDefaultPlugin поле, и вернуть это значение поля, которое null по умолчанию. Так как вы вызываете DebugPlugin#getDefault() как самый первый метод вашего main функция разумно, что она возвращает null, поскольку DebugPlugin#setDefault() ранее не назывался.

Вы не можете запустить Eclipse из основного метода, подобного этому. Вам нужно написать плагин, и он будет доступен из метода плагина.

Другие вопросы по тегам