001 package escjava.gui; 002 003 import javax.swing.*; 004 005 public class WindowThread extends Thread { 006 007 static TaskQueue windowTasks = new TaskQueue(); 008 009 public void run() { 010 while (true) { 011 Object o = windowTasks.getTask(); 012 String out = ""; 013 if (o instanceof GUI.EscTreeValue) { 014 ((GUI.EscTreeValue)o).showOutput(true); 015 } else if (o instanceof HtmlTask) { 016 HtmlTask ht = (HtmlTask)o; 017 EscHtml jf = EscHtml.make(ht.title,ht.filename, 018 GUI.gui.escframe,500,0,600,400); 019 jf.showit(); 020 } else if (o instanceof String) { 021 // Pop up an editor window 022 try { 023 // Here we parse the various kinds of error messages 024 // that Esc/java2 produces to find a file name and 025 // line number 026 final String aheader = 027 "Associated declaration is \""; 028 final String linetext = "\", line "; 029 final String coltext = ", col "; 030 String s = (String)o; 031 String name; 032 int lin; 033 if (s.startsWith(aheader)) { 034 int i = s.indexOf('\"',aheader.length()); 035 name = s.substring(aheader.length(),i); 036 i += linetext.length(); 037 int j = s.indexOf(',',i); 038 try { 039 lin = Integer.parseInt(s.substring(i,j)); 040 } catch (NumberFormatException e) { 041 lin = 0; 042 } 043 } else { 044 final String jarending = ".jar:"; 045 int i = s.indexOf(jarending); 046 i = i == -1 ? 0 : i + jarending.length(); 047 i = s.indexOf(':',i); 048 if (i == -1) continue; 049 name = s.substring(0,i); 050 i++; 051 int ii = s.indexOf(':',i); 052 if (ii == -1) continue; 053 try { 054 lin = Integer.parseInt(s.substring(i,ii)); 055 } catch (NumberFormatException e) { 056 lin = 0; 057 } 058 } 059 if (name.endsWith(".class")) { 060 int result = 061 JOptionPane.showConfirmDialog(GUI.gui.escframe, 062 "The referenced location is in a class file, " 063 + " so there is probably no java or specification" 064 + Project.eol 065 + " file for this class. Would you like to " 066 + " create a skeleton specification file and edit it?" + Project.eol + "[[[ Sorry - not yet implemented ]]]", 067 "Generate skeleton?", 068 JOptionPane.YES_NO_OPTION); 069 if (result == JOptionPane.NO_OPTION) continue; 070 continue; 071 072 } 073 EscEditor.make(name,lin,null,null).showit(); 074 } catch (Exception e) { 075 JOptionPane.showMessageDialog(GUI.gui.escframe, 076 "Failed to open editor window: " + Project.eol + 077 out + 078 o + Project.eol + e); 079 } 080 } 081 } 082 } 083 084 static class HtmlTask { 085 String filename; 086 String title; 087 public HtmlTask(String title, String filename) { 088 this.title = title; 089 this.filename = filename; 090 } 091 } 092 093 } 094