- when displaying MessageDialogs an error occurs due to illegal thread
accessing GUI classes
- in order to fix this, a new DialogRunnable is used, that will use
invoke synchronous to display the message dialog
[Yocto #4585]
Signed-off-by: Ioana Grigoropol <[email protected]>
---
.../src/org/yocto/remote/utils/DialogRunnable.java | 26 ++++++++++++++++++++
.../src/org/yocto/remote/utils/ShellSession.java | 13 ++++++----
2 files changed, 34 insertions(+), 5 deletions(-)
create mode 100644
plugins/org.yocto.remote.utils/src/org/yocto/remote/utils/DialogRunnable.java
diff --git
a/plugins/org.yocto.remote.utils/src/org/yocto/remote/utils/DialogRunnable.java
b/plugins/org.yocto.remote.utils/src/org/yocto/remote/utils/DialogRunnable.java
new file mode 100644
index 0000000..5fbab76
--- /dev/null
+++
b/plugins/org.yocto.remote.utils/src/org/yocto/remote/utils/DialogRunnable.java
@@ -0,0 +1,26 @@
+package org.yocto.remote.utils;
+
+import org.eclipse.jface.dialogs.MessageDialog;
+
+public class DialogRunnable implements Runnable{
+ int type = 0;
+ boolean result;
+ public static final int QUESTION = 1;
+ public static final int ERROR = 2;
+ String title;
+ String message;
+
+ DialogRunnable(String title, String message, int type){
+ this.title = title;
+ this.message = message;
+ this.type = type;
+ }
+ @Override
+ public void run() {
+ if (type == QUESTION) {
+ result = MessageDialog.openQuestion(null, title,
message);
+ } else if (type == ERROR) {
+ MessageDialog.openError(null, title, message);
+ }
+ }
+}
\ No newline at end of file
diff --git
a/plugins/org.yocto.remote.utils/src/org/yocto/remote/utils/ShellSession.java
b/plugins/org.yocto.remote.utils/src/org/yocto/remote/utils/ShellSession.java
index 0f4097b..4ac8001 100644
---
a/plugins/org.yocto.remote.utils/src/org/yocto/remote/utils/ShellSession.java
+++
b/plugins/org.yocto.remote.utils/src/org/yocto/remote/utils/ShellSession.java
@@ -22,7 +22,7 @@ import java.lang.reflect.InvocationTargetException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
-import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.swt.widgets.Display;
public class ShellSession {
/**
@@ -242,7 +242,9 @@ public class ShellSession {
int keys = new
Integer(m.group(1));
if (keys == 0) {
proc.destroy();
- accepted =
MessageDialog.openQuestion(null, "Host authenticity", "The authenticity of host
'" + host + "(" + host + ")' can't be established.\nAre you sure you want to
continue connecting ?");
+ DialogRunnable
runnable = new DialogRunnable("Host authenticity", "The authenticity of host '"
+ host + "(" + host + ")' can't be established.\nAre you sure you want to
continue connecting ?", DialogRunnable.QUESTION);
+
Display.getDefault().syncExec(runnable);
+ accepted =
runnable.result;
if (accepted){
proc =
Runtime.getRuntime().exec("ssh -o StrictHostKeyChecking=no " + user + "@" +
host);//add host key to known_hosts
try {
@@ -252,7 +254,7 @@ public class ShellSession {
}
proc.destroy();
} else {
-
MessageDialog.openError(null, "Host authenticity", "Host key verification
failed.");
+
Display.getDefault().syncExec( new DialogRunnable("Host authenticity", "Host
key verification failed.", DialogRunnable.ERROR));
}
} else {
String errorMsg
= "";
@@ -280,8 +282,9 @@ public class ShellSession {
buffer.delete(0, buffer.length());
}
}
- if (!accepted
&& !errorMsg.isEmpty())
-
MessageDialog.openError(null, "Host authenticity", errorMsg);
+ if (!accepted
&& !errorMsg.isEmpty()) {
+
Display.getDefault().syncExec( new DialogRunnable("Host authenticity",
errorMsg, DialogRunnable.ERROR));
+ }
}
loadKeysMatch = true;
break;
--
1.7.9.5
_______________________________________________
yocto mailing list
[email protected]
https://lists.yoctoproject.org/listinfo/yocto