в плагин Eclipse, я работаю у меня есть кусок кода, который в основном выглядит следующим образом:IPathVariableManager.validateValue (URI) возвращает нуль
public static void checkProblemV1() {
try {
String path = "C:\\temp";
org.eclipse.core.runtime.IPath value =
new org.eclipse.core.runtime.Path(path);
IPathVariableManager pathManager =
ResourcesPlugin.getWorkspace().getPathVariableManager();
String name = "somename";
IStatus statusName = pathManager.validateName(name);
IStatus statusValue = pathManager.validateValue(value);
if (statusName == null || statusValue == null) {
System.err.println("checkProblemV1(): statusName is " +
(statusName == null ? "null" : ("not null: '" + statusName + "'.")));
System.err.println("checkProblemV1(): statusValue is " +
(statusValue == null ? "null" : ("not null: '" + statusValue + "'.")));
}
else if (statusName.isOK() && statusValue.isOK()) {
pathManager.setValue(name, value); // setValue is deprecated
System.out.println("checkProblemV1(): Everything fine");
}
else {
if (!statusName.isOK()) {
System.err.println("checkProblemV1(): statusName is not OK.");
}
if (!statusValue.isOK()) {
System.err.println("checkProblemV1(): statusValue is not OK.");
}
}
}
catch (CoreException e) {
System.err.println("checkProblemV1(): CoreException: " + e.getMessage());
}
}
Когда выше метод выполняется, нет никаких проблем , но при компиляции я получаю предупреждение об устаревании для setValue(). Когда я захотел исправить это предупреждение об устаревании, заменив вызов на setValue() вызовом setURIValue(), с которым я столкнулся с проблемой. Сначала мне пришлось настроить, как был написан этот стиль в стиле Windows, чтобы избежать исключения URISyntaxException, но после этого setURIValue() возвращает значение null и после просмотра в документации я не вижу, что он должен это делать? Я предполагаю, что URI недействителен, но не знает, как его исправить. Ниже приведен метод тестирования в том же стиле, что и выше, демонстрирующий проблему.
public static void checkProblemV2() {
try {
String path = "C:\\temp";
// Have to replace \ with /, or we get URISyntaxExeption:
// checkProblemV2(): URISyntaxException: Illegal character in opaque part at index 2: C:\temp
path = path.replace('\\', '/');
java.net.URI value = new java.net.URI(path);
IPathVariableManager pathManager =
ResourcesPlugin.getWorkspace().getPathVariableManager();
String name = "somename";
IStatus statusName = pathManager.validateName(name);
IStatus statusValue = pathManager.validateValue(value);
if (statusName == null || statusValue == null) {
System.err.println("checkProblemV2(): statusName is " +
(statusName == null ? "null" : ("not null: '" + statusName + "'.")));
System.err.println("checkProblemV2(): statusValue is " +
(statusValue == null ? "null" : ("not null: '" + statusValue + "'.")));
}
else if (statusName.isOK() && statusValue.isOK()) {
pathManager.setURIValue(name, value);
System.out.println("checkProblemV2(): Everything fine");
}
else {
if (!statusName.isOK()) {
System.err.println("checkProblemV2(): statusName is not OK.");
}
if (!statusValue.isOK()) {
System.err.println("checkProblemV2(): statusValue is not OK.");
}
}
}
catch (URISyntaxException e) {
System.err.println("checkProblemV2(): URISyntaxException: " + e.getMessage());
}
catch (CoreException e) {
System.err.println("checkProblemV2(): CoreException: " + e.getMessage());
}
}
Когда я запускаю вышеуказанные два метода, я получаю следующий вывод.
checkProblemV1(): Everything fine
checkProblemV2(): statusName is not null: 'Status OK: unknown code=0 OK null'.
checkProblemV2(): statusValue is null
Спасибо за чтение и за любую помощь, это серьезно оценено!
Я попытался следующие, но я получаю ту же проблему: значение java.net.URI = новый java.io.File (путь). Touri(); (и я пропустил вызов path.replace(), просто передав конструктору файла путь в его исходном виде «C: \\ temp» –