comp.lang.java.programmer
http://groups-beta.google.com/group/comp.lang.java.programmer
[EMAIL PROTECTED]

Today's topics:

* Stupid null pointer exception - 1 messages, 1 author
  
http://groups-beta.google.com/group/comp.lang.java.programmer/browse_thread/thread/aeeebd0bb6f11be3
* Build a DLL that uses a DLL.....LNK2001 error JNI - 1 messages, 1 author
  
http://groups-beta.google.com/group/comp.lang.java.programmer/browse_thread/thread/802a52aa853bc605
* FileViewer launch of program - 2 messages, 2 authors
  
http://groups-beta.google.com/group/comp.lang.java.programmer/browse_thread/thread/e1aa7a3eda40a7b6
* XML Pretty Printer - 1 messages, 1 author
  
http://groups-beta.google.com/group/comp.lang.java.programmer/browse_thread/thread/9d992999aba0854d
* How to starthandshake with client browser?? - 1 messages, 1 author
  
http://groups-beta.google.com/group/comp.lang.java.programmer/browse_thread/thread/2d41b9d8f6879f8b
* applet's call comportement - 3 messages, 2 authors
  
http://groups-beta.google.com/group/comp.lang.java.programmer/browse_thread/thread/cc1d4563dc67060c
* Method invocation conversion - 1 messages, 1 author
  
http://groups-beta.google.com/group/comp.lang.java.programmer/browse_thread/thread/a84caa7322a6162d
* How do you cast to array? - 12 messages, 7 authors
  
http://groups-beta.google.com/group/comp.lang.java.programmer/browse_thread/thread/884dee2def4bbb47
* Question about wait - 3 messages, 3 authors
  
http://groups-beta.google.com/group/comp.lang.java.programmer/browse_thread/thread/c3b941d1ad39c7b8
* A question to parse HTML files - 1 messages, 1 author
  
http://groups-beta.google.com/group/comp.lang.java.programmer/browse_thread/thread/f5792f3bd809986a
* MIDLet newbie questions - 1 messages, 1 author
  
http://groups-beta.google.com/group/comp.lang.java.programmer/browse_thread/thread/4fe913f96a7b75ac
  
==========================================================================
TOPIC: Stupid null pointer exception
http://groups-beta.google.com/group/comp.lang.java.programmer/browse_thread/thread/aeeebd0bb6f11be3
==========================================================================

== 1 of 1 ==
Date:   Tues,   Nov 2 2004 2:39 am
From: Alex Hunsley <[EMAIL PROTECTED]> 

Ann wrote:
> "Virgil Green" <[EMAIL PROTECTED]> wrote in message
> news:[EMAIL PROTECTED]
> 
>>"Ann" <[EMAIL PROTECTED]> wrote in message
>>news:[EMAIL PROTECTED]
>>
>>>>use. All you did was add one line of snide comment.
>>>
>>>I know.
>>
>>Which, of course, makes the netiquette violation even more egregious.
>>
>> - Virgil
>>
> 
> 
> I know.

Good!




==========================================================================
TOPIC: Build a DLL that uses a DLL.....LNK2001 error JNI
http://groups-beta.google.com/group/comp.lang.java.programmer/browse_thread/thread/802a52aa853bc605
==========================================================================

== 1 of 1 ==
Date:   Tues,   Nov 2 2004 2:43 am
From: [EMAIL PROTECTED] (Ann) 

I am trying to build a dll, which will be used in java program.
Following is my environment 
VC++6.0, WIN2000, J2SDK1.4.2_03
I am constantly getting LNK2001 error

rfidDataManagerImpl.obj : error LNK2001: unresolved external symbol
_rfCloseReader
rfidDataManagerImpl.obj : error LNK2001: unresolved external symbol
_rfErrMessage

In the cl command I have specified the jdk/include, jdk/include/win32
Microsoft VS/VC98/LIB /dir_where_code_i_present

After running the cl command , I run the Link command too

link /LibPath:E:\Microsoft~3\vc98\lib /dll /out:rfid.dll
rfidDataManagerImpl.obj

I have included jvm.lib in the directory where the code is present and
also included the path in the cl.exe command..

I am using a .lib and .dll file, which was provided by a Vendor, since
I am trying to integrate Java with the C apis that communicate with
the RFID reader.


I have no clue what I can do to make those functions visible..
How can I get the Linking to work...?????

Please Suggest...

Ann




==========================================================================
TOPIC: FileViewer launch of program
http://groups-beta.google.com/group/comp.lang.java.programmer/browse_thread/thread/e1aa7a3eda40a7b6
==========================================================================

== 1 of 2 ==
Date:   Tues,   Nov 2 2004 3:02 am
From: [EMAIL PROTECTED] (Andrew Neiderer ) 

I am new to Java and trying to piece together what is out there.

I would like to launch a program from a Java Swing GUI on my
RedHat Linux 7.0 machine.  I believe I am close with the following
code.  I just need a modified FirstPane.java.  

For example,
a simple listing of files (ls).  My intent is something more complicated
but executing a simple command is a start.

If anyone has some time maybe they could look at my code below and
suggest what I need to do.

If I didn't give enough info please let me know.

Thank you.

- Andrew M. Neiderer


-------- BTOgui.java -------------------
 
import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 
 
public class BTOgui extends JFrame { 
 
  // data for the class 
 
  private JMenuBar     menuBar; 
  private JMenu        menuFile, 
                       menuOptions, 
                       menuHelp; 
  private JMenuItem    menuItem; 
 
  private JPanel       mainPanel; 
 
  private JDesktopPane desktopPane; 
 
  private JInternalFrame firstInternalFrame, 
                         secondInternalFrame, 
                         thirdInternalFrame; 
 
  FirstPane firstPane; 
 
  // functions of the class 
 
  public BTOgui()                                                       // default 
constructor function 
  { 
    super("BTO"); 
 
    // create the menu bar  
 
    menuBar = new JMenuBar(); 
    setJMenuBar(menuBar); 
 
    menuFile = new JMenu("File");                                       // build the 
File menu 
    menuFile.setMnemonic('F'); 
    menuBar.add(menuFile); 
 
    menuItem = new JMenuItem("Open");                                   //   File menu 
"Open" item  
    menuItem.setMnemonic('O'); 
    menuFile.add(menuItem); 
 
    menuItem = new JMenuItem("Save");                                   //   File menu 
"Save" item 
    menuItem.setMnemonic('S'); 
    menuFile.add(menuItem); 
 
    menuItem = new JMenuItem("Save As");                                //   File menu 
"Save AS" item 
    menuItem.setMnemonic('a'); 
    menuFile.add(menuItem); 
         
    menuFile.addSeparator(); 
 
    menuItem = new JMenuItem("Exit");                                   //   File menu 
"Exit" item 
    menuItem.setMnemonic('x'); 
    menuItem.addActionListener( 
      new ActionListener() 
      { 
        public void actionPerformed(ActionEvent e) 
        { 
          System.exit(0); 
        } 
      } 
    ); 
    menuFile.add(menuItem); 
 
    menuOptions = new JMenu("Options");                                 // build the 
Options menu 
    menuOptions.setMnemonic('p'); 
    menuBar.add(menuOptions); 
 
    menuBar.add(Box.createHorizontalGlue());                      
 
    menuHelp = new JMenu("Help");                                       // build the 
Help menu 
    menuHelp.setMnemonic('H'); 
    menuBar.add(menuHelp); 
 
    // create the main panel 
    mainPanel = new JPanel(new BorderLayout()); 
 
    // create a desktop pane 
    desktopPane = new JDesktopPane(); 
 
    // create first internal frame and add to desktop pane 
 
    firstInternalFrame = new JInternalFrame("first",true,true,true,true); 
 
    firstPane = new FirstPane(); 
    firstInternalFrame.getContentPane().add(firstPane); 
 
    firstInternalFrame.setVisible(true); 
    firstInternalFrame.setBounds(10,10,600,350); 
 
    desktopPane.add(firstInternalFrame); 
 
    // add desktop pane to main panel 
    mainPanel.add(desktopPane); 
 
    // add main panel to root panel 
    getContentPane().add(mainPanel); 
 
    pack(); 
  } 
 
  public static void main(String args[])                                // main 
function 
  { 
    BTOgui frame = new BTOgui(); 
 
    frame.setBounds(100,100,775,725); 
 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
 
    frame.setVisible(true); 
  } 
 
} 
 
---------------  FilePreviewer.java  -------------------------
 
import java.awt.*; 
import java.awt.event.*; 
import java.io.File; 
import java.beans.*; 
import java.util.Hashtable; 
import java.util.Enumeration; 
import javax.swing.*; 
import javax.swing.border.*; 
import javax.swing.filechooser.*; 
 
class FilePreviewer extends JComponent implements PropertyChangeListener { 
 
  // functions of the class 
 
  public FilePreviewer(JFileChooser fc)                                     // 
constructor function 
  { 
    setPreferredSize(new Dimension(100,50)); 
    fc.addPropertyChangeListener(this); 
  } 
 
  public void loadImage()                                                   //  
  { 
    if ( f != null ) { 
      ImageIcon tmpIcon = new ImageIcon(f.getPath()); 
 
      if ( tmpIcon.getIconWidth() > 90 ) { 
        thumbnail = new ImageIcon( 
                     tmpIcon.getImage().getScaledInstance(90,-1,Image.SCALE_DEFAULT)); 
      }  
      else { 
        thumbnail = tmpIcon; 
      } 
    } 
  } 
 
  public void propertyChange(PropertyChangeEvent e)                         // 
  { 
    String prop = e.getPropertyName(); 
 
    if ( prop == JFileChooser.SELECTED_FILE_CHANGED_PROPERTY ) { 
      f = (File) e.getNewValue(); 
 
      if ( isShowing() ) { 
        loadImage(); 
        repaint(); 
      } 
    } 
  } 
 
  public void paint(Graphics g)                                             // 
  { 
    if ( thumbnail == null ) { 
      loadImage(); 
    } 
 
    if ( thumbnail != null ) { 
      int x = getWidth() / 2 - thumbnail.getIconWidth() / 2; 
      int y = getHeight() / 2 - thumbnail.getIconHeight() / 2; 
 
      if ( y < 0 ) { 
        y = 0; 
      } 
 
      if ( x < 5 ) { 
        x = 5; 
      } 
 
      thumbnail.paintIcon(this,g,x,y); 
    } 
  } 
 
  // data for the class 
 
  ImageIcon thumbnail = null; 
  File f = null; 
} 
 
-------------------  FirstPane.java  
 
import java.awt.*; 
import java.awt.event.*; 
import java.lang.Object.*; 
import java.lang.String.*; 
import java.io.File; 
import java.util.Hashtable; 
import java.util.Enumeration; 
import java.beans.*; 
import javax.swing.*; 
import javax.swing.border.*; 
import javax.swing.filechooser.*; 
import java.io.IOException;      
 
public class FirstPane extends JPanel { 
 
  // data for the class 
 
  private FilePreviewer filePreviewer; 
  private MyFileFilter fileFilter; 
  private MyFileView fileView; 
 
  private JFileChooser fileChooser; 
 
  protected File currentDirectory =  
//   new File("/opt/OTB2.0/OTB_2.0"); 
   new File("/"); 
  protected File currentFile = null; 
 
  // function of the class 
 
  public FirstPane()                                              // default 
constructor function 
  { 
    setBorder(new TitledBorder(new EtchedBorder(),"First")); 
 
    fileChooser = new JFileChooser(); 
 
    filePreviewer = new FilePreviewer(fileChooser); 
 
    fileChooser.setAccessory(filePreviewer); 
 
    fileFilter = new MyFileFilter(new String[] {"sh"}, 
                                   "Bourne scripts"); 
 
    fileChooser.addChoosableFileFilter(fileFilter); 
 
    fileView = new MyFileView(); 
 
    fileChooser.setFileView(fileView); 
 
    fileChooser.setCurrentDirectory(currentDirectory); 
 
    add(fileChooser); 
 
    try { 
      Process p = Runtime.getRuntime().exec("ls.sh"); 
 
      p.waitFor(); 
      System.err.println("complete"); 
    } 
    catch (IOException ex) 
    { 
      System.err.println("Front.actionPerformed(): " + ex); 
      return; 
    } 
    catch (InterruptedException ex) 
    { 
      System.err.println("Front.actionPerformed(): " + ex); 
    } 
  } 
 
} 

--------------------  MyFileFilter.java  -------------------------
 
import java.io.File; 
import java.util.Hashtable; 
import java.util.Enumeration; 
import java.beans.*; 
import javax.swing.*; 
import javax.swing.filechooser.*; 
 
public class MyFileFilter extends FileFilter { 
 
  // functions of the class 
 
  public MyFileFilter()                                             // default 
constructor function 
  { 
    this.filters = new Hashtable(); 
  } 
 
  public MyFileFilter(String extension)                             // constructor 
function that accepts 
  {                                                                 //  files with the 
given extension. 
    this(extension,null); 
  } 
 
  public MyFileFilter(String extension, String description)         // constructor 
function that accepts 
  {                                                                 //  the given type 
of file. 
    this(); 
 
    if ( extension != null )  
      addExtension(extension); 
 
    if ( description != null )  
      setDescription(description); 
  } 
 
  public MyFileFilter(String filters[])                             // constructor 
function that accepts 
  {                                                                 //  array of 
strings. 
    this(filters,null); 
  } 
 
  public MyFileFilter(String filters[], String description)         // constructor 
function that accepts  
  {                                                                 //  array of 
strings and description. 
    this(); 
 
    for ( int i = 0; i < filters.length; i++ ) { 
      // add filters one by one 
      addExtension(filters[i]); 
    } 
 
    if ( description != null )  
      setDescription(description); 
  } 
 
  public String getExtension(File f)                                // return the 
extension of the file's name 
  { 
    if ( f != null ) { 
      String filename = f.getName(); 
      int i = filename.lastIndexOf('.'); 
 
      if ( i > 0  &&  i < filename.length() - 1 ) { 
        return filename.substring(i + 1).toLowerCase(); 
      } 
    } 
 
    return null; 
  } 
 
  public void setExtensionListInDescription(boolean b)              // determines 
whether the extension list 
  {                                                                 //  should show 
up. 
    useExtensionsInDescription = b; 
    fullDescription = null; 
  } 
 
  public boolean isExtensionListInDescription()                    // returns whether 
the extension list  
  {                                                                //  should show up. 
        return useExtensionsInDescription; 
  } 
 
  public void addExtension(String extension)                        // adds an 
extension  
  { 
    if ( filters == null ) { 
      filters = new Hashtable(5); 
    } 
 
    filters.put(extension.toLowerCase(),this); 
      fullDescription = null; 
  } 
 
  public String getDescription()                                 // description of 
filter 
  { 
    if ( fullDescription == null ) { 
 
      if ( description == null  ||  isExtensionListInDescription() ) { 
 
        fullDescription = description == null ? "(" : description + " ("; 
 
        // build the description from the extension list 
 
        Enumeration extensions = filters.keys(); 
 
        if ( extensions != null ) { 
 
          fullDescription += "." + (String) extensions.nextElement(); 
           
          while ( extensions.hasMoreElements() ) { 
            fullDescription += ", " + "." + (String) extensions.nextElement(); 
          } 
        } 
 
        fullDescription += ")"; 
      } 
      else { 
        fullDescription = description; 
      }         
    } 
 
    return fullDescription; 
  }  
 
  public void setDescription(String description)                    // sets the 
description of this filter 
  { 
    this.description = description; 
    fullDescription = null; 
  } 
 
  public boolean accept(File f)                                     // returns true if 
this file should be shown  
  {                                                                 //  in the 
directory pane, false ow. 
    if ( f != null ) { 
      if ( f.isDirectory() ) { 
        return true; 
      } 
 
      String extension = getExtension(f); 
 
      if ( extension != null  &&  filters.get(getExtension(f)) != null ) { 
        return true; 
      } 
    } 
 
    return false; 
  } 
 
  // data for the class 
 
  private static String TYPE_UNKNOWN = "Type Unknown"; 
  private static String HIDDEN_FILE = "Hidden File"; 
 
  private Hashtable filters = null; 
  private String description = null; 
  private String fullDescription = null; 
  private boolean useExtensionsInDescription = true; 
 
  final static String jpg = "jpg"; 
  final static String gif = "gif"; 
  final static String tiff = "tiff"; 
} 

------------------------------  MyFileView.java  -------------------------
 
import java.io.File; 
import java.util.Hashtable; 
import java.util.Enumeration; 
import javax.swing.*; 
import javax.swing.filechooser.*; 
 
public class MyFileView extends FileView { 
 
  // functions of the class 
 
  public String getName(File f)                                  // return the name of 
this file 
  { 
    // let the L&F FileView figure this out 
    return null;  
  } 
     
  public String getDescription(File f)                           // return a 
description of the file 
  { 
    return (String) fileDescriptions.get(f); 
  } 
     
  public void putDescription(File f, String fileDescription)     // adds a human 
readable description of the file 
  { 
    fileDescriptions.put(fileDescription,f); 
  } 
 
  public String getTypeDescription(File f)                       // return a 
description of the type 
  {                                                              //  of the file. 
    return (String) typeDescriptions.get(getExtension(f));        
  } 
 
                                                                 // adds a human 
readable type description of the file 
 
  public void putTypeDescription(String extension, String typeDescription)  
  { 
    typeDescriptions.put(typeDescription, extension); 
  } 
 
  public void putTypeDescription(File f, String typeDescription)  
  { 
    putTypeDescription(getExtension(f),typeDescription); 
  } 
 
  public String getExtension(File f)                             // get the extension 
of the file 
  { 
    String name = f.getName(); 
 
    if ( name != null ) { 
      int extensionIndex = name.lastIndexOf('.'); 
 
      if ( extensionIndex < 0 ) { 
        return null; 
      } 
 
      return name.substring(extensionIndex + 1).toLowerCase(); 
    } 
 
    return null; 
  } 
 
  public Icon getIcon(File f)                                    // return an icon for 
the file 
  { 
    Icon icon = null; 
    String extension = getExtension(f); 
 
    if ( extension != null ) { 
      icon = (Icon) icons.get(extension); 
    } 
 
    return icon; 
  } 
 
  public void putIcon(String extension, Icon icon)               // adds an icon based 
on type of the file  
  { 
    icons.put(extension,icon); 
  } 
     
  public Boolean isHidden(File f)                                // is the file hidden 
? 
  { 
    String name = f.getName(); 
 
    if ( name != null  &&  !name.equals("")  &&  name.charAt(0) == '.')  
      return Boolean.TRUE; 
    else  
      return Boolean.FALSE; 
 
  } 
 
  public Boolean isTraversable(File f)                           // can the directory 
be opened ? 
  { 
    if ( f.isDirectory() )  
      return Boolean.TRUE; 
    else  
      return Boolean.FALSE; 
  } 
     
  // data for the class 
 
  private Hashtable icons = new Hashtable(5); 
  private Hashtable fileDescriptions = new Hashtable(5); 
  private Hashtable typeDescriptions = new Hashtable(5); 
 
} 



== 2 of 2 ==
Date:   Tues,   Nov 2 2004 4:02 am
From: Andrew Thompson <[EMAIL PROTECTED]> 

On Tue, 2 Nov 2004 11:02:25 GMT, Andrew Neiderer  wrote:

> I am new to Java ..

The best help for beginners can be found on a group described here..
<http://www.physci.org/codes/javafaq.jsp#cljh>

> I would like to launch a program from a Java Swing GUI on my
> RedHat Linux 7.0 machine.  I believe I am close with the following
> code.  I just need a modified FirstPane.java.  

Work out how to doi that from a single non-GUI class with 
a main and you'll know how to do it in your 400+ lines of 
code spread across 5 java files.

Which brings me to..

Please *don't* post 400+ lines of code spread across 5 
files to demonstrate your inability to load/run a shell script.
That can be done in under 30 lines.  For tips on examples..
<http://www.physci.org/codes/sscce.jsp>

> If anyone has some time maybe they could look at my code below and
> suggest what I need to do.

Dump it and write an SSCCE.

> If I didn't give enough info please let me know.

You gave far (far) too much, and too little at the same time.
But let's address the 'too much' first..

-- 
Andrew Thompson
http://www.PhySci.org/codes/  Web & IT Help
http://www.PhySci.org/  Open-source software suite
http://www.1point1C.org/  Science & Technology
http://www.LensEscapes.com/  Images that escape the mundane




==========================================================================
TOPIC: XML Pretty Printer
http://groups-beta.google.com/group/comp.lang.java.programmer/browse_thread/thread/9d992999aba0854d
==========================================================================

== 1 of 1 ==
Date:   Tues,   Nov 2 2004 3:55 am
From: Bruno Grieder <[EMAIL PROTECTED]> 

jacob wrote:
> I need a small simple class for formatting
> XML for logging purposes. Something like:
> 
> String xml = XmlFormatter.prettyPrint (String xml);
> 
> I don't intend to throw an XML parser at this
> problem.
> 

Hi Jacob,

I propose that you start with this thing below that seems to do the job, 
you improve it (use of for..loops, maybe use StrinBuffer instead of 
String, etc...) and you post it back to this newsgroup.

Deal?

Bruno

nb: I am sure we can do much better with some clever regexp, but..

private String xmlBeautify(String xml) {
String xmlString="";
try {
   BufferedReader br = new BufferedReader(new StringReader(xml));
   String line;
   int openClose = 0;
   String previous= "";
   while ((line=br.readLine())!=null) {
        for (int i=0;i<line.length();i++) {
                
                /*opening or closing*/
          if ((line.charAt(i) =='<') && i<line.length()-1) {
                
                  /* closing tag*/
                if ((line.charAt(++i) =='/')) {
                  if (previous.equals("CLOSE")) {
                          /*insert br */
                        xmlString += "\n";
                        for (int j=0;j<openClose-1;j++) xmlString+="\t";
                        xmlString += "</";
                  } else { /* do nothing */
                        xmlString += "</";
                  }
                  previous = "CLOSE";
                  openClose -= (openClose>0) ? 1 : 0;
                
                /* xml instruction */
                } else if ((line.charAt(i) =='?')) {
                  xmlString +="<?";

                /* comment */
                } else if ((line.charAt(i) =='!')) {
                  xmlString +="<!";

                /* opening tag */
                }else {
                        /*insert br */
                  xmlString += "\n";
                  for (int j=0;j<openClose;j++) xmlString+="\t";
                  xmlString += "<"+line.charAt(i);
                  previous = "OPEN";
                  openClose+=1;
                } //else
                
          /* a *normal* character */
          } else {
                xmlString += line.charAt(i);
          }
        }//For
        //xmlString+="\n";
   }
} catch (IOException ioe) {
   return null;
}
return xmlString;
}




==========================================================================
TOPIC: How to starthandshake with client browser??
http://groups-beta.google.com/group/comp.lang.java.programmer/browse_thread/thread/2d41b9d8f6879f8b
==========================================================================

== 1 of 1 ==
Date:   Tues,   Nov 2 2004 4:12 am
From: Bruno Grieder <[EMAIL PROTECTED]> 

Rogan Dawes wrote:
> Jakekeke wrote:
> 
>> Thank Bruno
>> That is what i want to know.
>> However, i am still confuse on that problem.
>>
>> After i get the CONNECT request
>> what should i sent back to the browser? 200 message??
>> And then what should i do to handshake with browser?
>> ie, how to let the browser to trust my certificate
>>
>> I know how to make a plaintext connection,
>> however, i should finish handshake first, right?
>> which is the problem i didn't solve yet.
>>
>> Would anyone can help me?
>> Thanks.
> 
> 
> Please see my other post in this thread pointing you to WebScarab. 
> WebScarab does EXACTLY what you are trying to do.
> 
> Look in the code for ConnectionHandler.java. I'll even give you a link 
> to it.
> 
> http://cvs.sourceforge.net/viewcvs.py/owasp/webscarab/src/org/owasp/webscarab/plugin/proxy/ConnectionHandler.java?rev=1.27&view=markup
>  
> 
> 
> Note that there is a big difference between doing the handshake, and 
> getting the browser to trust your certificate. To get the browser to 
> trust your certificate, it must be signed by a Certificate Authority 
> that the browser recognises. WebScarab makes use of a self-signed 
> certificate that causes a pop-up error message. To prevent this, you 
> would need to import the certificate into your browser's certificate 
> store. The process to do this will vary depending on the browser that 
> you are using.
> 
> Regards,
> 
> Rogan

Hi again,

here you go.

Somme additional information. The general structure of you program should be

[Assuming you program is called MIM (Man in The Middle) and is 
"transparent" (see below for more on this).]

Client (browser) --> MIM --> Server

1-Open an SSL server Socket
2-Wait for a connection (from your client web browser).
3-Start a connection handler as a separate thread
4-The connection handler then starts a client socket on the server (as a 
separate thread too if possible).
5-The connection handler reads the OutputStream of the server socket and 
writes the content to the InputStream of the client socket (as such: 
this will write HTTP headers and the payload/content).
6-The connection handler reads the InputStream of the client socket and 
writes the content to the OutputStream of the server socket (as such: 
this will write HTTP headers and the payload/content - in particular the 
status).
7-Close everything nicely.


Additional notes:

a-You MIM should NOT send any reply directly to the client.

b-If you want to know more about the SSL handshake, put this in your 
code: System.setProperty("javax.net.debug","ssl hanshake"); This will 
generate a LOT of debugging information

c- Your MIM will NEVER be transparent in terms of authentication: you 
can transparently pass the content including headers from client to 
server, but authentication will always be Client to MIM and MIM to 
server. (Fortunately, if not this would defeat the whole purpose of 
using certificates).

Cheers





==========================================================================
TOPIC: applet's call comportement
http://groups-beta.google.com/group/comp.lang.java.programmer/browse_thread/thread/cc1d4563dc67060c
==========================================================================

== 1 of 3 ==
Date:   Tues,   Nov 2 2004 4:23 am
From: "Emmanuel Freund" <[EMAIL PROTECTED]> 

> > Well, the AWT toolkit's environnement don't match the things i want to
> > render.
>
> What 'things' are you referring to?  Fonts (faces and sizes)
> spacig or padding, borders etc. can all be controlled for
> Swing components by setting a suitable Look and Feel.
>

let's say: frames have to be in 1280*1024,  there must be no resize button,
the close button is a big button in the right-down corner, some things like
that... it's easy to make a child of jframe with those function, but i don't
see how to use Look and Feel to render those things... is it possible?


> >..But i aggree it would be simpler in this way.
> > I'm just wondering, when an applet call the JFrame class for example,
there
> > has to be somewhere the path where the applet could find this class, so
if
> > we change the path toward my own class, the applet will call my own
class
> > instead, no?
>
> No.  Java will always check the core API for classes before
> it looks in other places.  It is easy to replace classes outside
> the core classes in the way you describe, but not the core classes
> themselves.
>
> Note also that (AFAIU), changing the classloader will not help
> here, since custom classloaders first cede to the parent classloader>
> If the parent classloader finds the class, the custom loader
> simply passes that class back to the caller.
>
k, thanks. So maybe make my own implementation of toolkit and use the
createFrame() function? would it work?

> -- 
> Andrew Thompson
> http://www.PhySci.org/codes/  Web & IT Help
> http://www.PhySci.org/  Open-source software suite
> http://www.1point1C.org/  Science & Technology
> http://www.LensEscapes.com/  Images that escape the mundane





== 2 of 3 ==
Date:   Tues,   Nov 2 2004 4:31 am
From: "Emmanuel Freund" <[EMAIL PROTECTED]> 


"John C. Bollinger" <[EMAIL PROTECTED]> a écrit dans le message de
news:[EMAIL PROTECTED]
> Emmanuel Freund wrote:
> > Well, the AWT toolkit's environnement don't match the things i want to
> > render. But i aggree it would be simpler in this way.
>
> The AWT toolkit is the base on which everything else is built.  It
> necessarily matches what you want to render, or you won't render it with
> AWT / Swing.  Now, you may not _see_ how things in the Toolkit match up;
> if you want a Toolkit-based approach to work you will need to learn how
> the classes you are interested in (JFrame, and perhaps others) use the
> Toolkit, directly or indirectly.  For help with this kind of task you
> might want to go next door to comp.lang.java.gui.
>

thanks, i now see better how this is working... i'm going  seek some info on
toolkit on comp.lang.java.gui. So if i make my own implementation of
toolkit, a foreign applet will use my own implementation of toolkit? even if
it specifies some Look and Feel options? is that possible?
To be more precise, the frames in my browser are 1280*1024, don't will be
resized, and the close button is a big button on the right-down corner of
the frame, so i would like that when an applet opened by my browser call a
frame, it use those frame.




> > I'm just wondering, when an applet call the JFrame class for example,
there
> > has to be somewhere the path where the applet could find this class, so
if
> > we change the path toward my own class, the applet will call my own
class
> > instead, no? even if my own class is a child of JFrame? unless i've
really
> > none understand, which is a possibility...
>
> As I wrote before, you would do this by bringing a custom ClassLoader
> into the picture.  ClassLoaders are *the* means by which Java VMs find
> classes after bootstrap.  It might be appropriate to use an
> applet-specific ClassLoader anyway, to isolate external applets' classes
> from your application's own.  Trying to use one to substitute your own
> version of a class for the System's version raises all the problems I
> described to you before.  In particular, here is a schematic example of
> why you cannot use a ClassLoader to substitute a class for one of its
> ancestors:
>
> 1) applet com.sombodyelse.MyApplet wants to open a JFrame, so it asks
> its ClassLoader to load javax.swing.JFrame for it.
>
> 2) A custom ClassLoader intercepts the request, and instead of passing
> it first to its parent ClassLoader (as a "normal" ClassLoader would do)
> it finds and starts to load a class file for a class named
> com.mycompany.myapplication.MyFrame to satisfy the request.
>
> 3) MyJFrame needs its superclass, javax.swing.JFrame, so it asks its
> ClassLoader to load that class for it.
>
> 4) Go to (2), or throw a ClassCircularityError.

i see. So classloader is not my miracle solution ;)


>
>
> John Bollinger
> [EMAIL PROTECTED]

--
Emmanuel Freund
[EMAIL PROTECTED]





== 3 of 3 ==
Date:   Tues,   Nov 2 2004 4:42 am
From: Andrew Thompson <[EMAIL PROTECTED]> 

On Tue, 2 Nov 2004 13:23:37 +0100, Emmanuel Freund wrote:

>>> Well, the AWT toolkit's environnement don't match the things i want to
>>> render.
>>
>> What 'things' are you referring to?  Fonts (faces and sizes)
>> spacig or padding, borders etc. can all be controlled for
>> Swing components by setting a suitable Look and Feel.
> 
> let's say: frames have to be in 1280*1024,  there must be no resize button,
> the close button is a big button in the right-down corner, some things like
> that... it's easy to make a child of jframe with those function, but i don't
> see how to use Look and Feel to render those things... is it possible?

Not without a custom VM.  

The issue here is you wanting to change *existing* frames.  
That would allow you to change the look of frames produced by 
(for example) my software.

But what makes you think I want *my* software 1280*1024, with
the 'big button' on the right (and possibly your company's 
moniker all over them) for *my* project..

>>>..But i aggree it would be simpler in this way.
>>> I'm just wondering, when an applet call the JFrame class for example,
> there
>>> has to be somewhere the path where the applet could find this class, so
> if
>>> we change the path toward my own class, the applet will call my own
> class
>>> instead, no?
>>
>> No.  Java will always check the core API for classes before
>> it looks in other places.  
..
> k, thanks. So maybe make my own implementation of toolkit and use the
> createFrame() function? 

Only if you can get users to install the 'version' of the VM that
you have hacked into, but I suspect that would violate Sun's 
distribution agreement for the VM.

So, again, not that I know of.  

You do not seem to display any understanding of why Sun might 
resist attempts to change the look of the frames at the level 
(and in the way) you want, do you?

BTW - if you want to get the GUI gurus into this one, you have 
the wrong group.  You might better redirect your question to..
<http://www.physci.org/codes/javafaq.jsp#cljg>

-- 
Andrew Thompson
http://www.PhySci.org/codes/  Web & IT Help
http://www.PhySci.org/  Open-source software suite
http://www.1point1C.org/  Science & Technology
http://www.LensEscapes.com/  Images that escape the mundane




==========================================================================
TOPIC: Method invocation conversion
http://groups-beta.google.com/group/comp.lang.java.programmer/browse_thread/thread/a84caa7322a6162d
==========================================================================

== 1 of 1 ==
Date:   Tues,   Nov 2 2004 4:27 am
From: Daniel Sjöblom <[EMAIL PROTECTED]> 

Mark Bottomley wrote:
>
> iload (local variable containing a)
> iload (local variable containing c)
> iadd
> i2b
> istore (local variable containing b)
> 
> this guarantees that the range of the addition result is trimmed to be
> in the -128..127 range of a valid byte. The bytecodes that generated
> the parameter for the the method call would compile to something
> that guaranteed the value was in a range for the appropriate integer
> subtype before it got to the method call

But it is not enforced by the VM. There is no guarantee that a byte 
passed to a method really is in the byte range, which was the source of 
confusion, since it is (depending on how the text is to be interpreted) 
mentioned as a structural constraint in the spec. It is ok to pass any 
int value to a method taking a byte as argument (in the Sun VMs).

Here is an example demonstrating what I mean (it will happily print any 
int value you pass to it):

public class test.ByteTest extends java.lang.Object
{
     public void <init>()
     {
        max stack: 1
        max locals: 1

        0: aload_0
        1: invokespecial    java.lang.Object.<init>()
        4: return
     }

     public static void main(java.lang.String[])
     {
        max stack: 2
        max locals: 1

        0: aload_0
        1: iconst_0
        2: aaload
        3: invokestatic     java.lang.Integer.parseInt(java.lang.String)
        6: invokestatic     test.ByteTest.method(byte)
        9: getstatic        java.lang.System.out (java.io.PrintStream)
       12: ldc              "ok"
       14: invokevirtual    java.io.PrintStream.println(java.lang.String)
       17: return
     }

     public static void method(byte)
     {
        max stack: 2
        max locals: 1

        0: getstatic        java.lang.System.out (java.io.PrintStream)
        3: iload_0
        4: invokevirtual    java.io.PrintStream.println(int)
        7: return
     }
}

-- 
Daniel Sjöblom
Remove _NOSPAM to reply by mail




==========================================================================
TOPIC: How do you cast to array?
http://groups-beta.google.com/group/comp.lang.java.programmer/browse_thread/thread/884dee2def4bbb47
==========================================================================

== 1 of 12 ==
Date:   Tues,   Nov 2 2004 4:34 am
From: DeMarcus <[EMAIL PROTECTED]> 


Look at this.

Vector v = new Vector();
v.add( new String( "Nothing" ) );
String[] sv = (String[])v.toArray();

Why do I get a ClassCastException here?

Thanks
Daniel





== 2 of 12 ==
Date:   Tues,   Nov 2 2004 4:38 am
From: Joona I Palaste <[EMAIL PROTECTED]> 

DeMarcus <[EMAIL PROTECTED]> scribbled the following:
> Look at this.

> Vector v = new Vector();
> v.add( new String( "Nothing" ) );
> String[] sv = (String[])v.toArray();

> Why do I get a ClassCastException here?

Because what you get is an Object[], and String[] and Object[] aren't
compatible types. If they were, you could have an Object[] reference
referring to a String[] object, and use this to set one of the
elements to refer to some other type of object than String - major
bummer.
The toArray() method has a different version taking one array
parameter. It employs some compiler magic (which I'm not altogether
familiar with) to make the returned object the same array class as
the parameter. You only need an array - it doesn't have to contain
anything. I usually do this:

String[] sv = (String[])v.toArray(new String[0]);

-- 
/-- Joona Palaste ([EMAIL PROTECTED]) ------------- Finland --------\
\-------------------------------------------------------- rules! --------/
"To err is human. To really louse things up takes a computer."
   - Anon



== 3 of 12 ==
Date:   Tues,   Nov 2 2004 4:40 am
From: Michael Borgwardt <[EMAIL PROTECTED]> 

DeMarcus wrote:

> 
> Look at this.
> 
> Vector v = new Vector();
> v.add( new String( "Nothing" ) );
> String[] sv = (String[])v.toArray();
> 
> Why do I get a ClassCastException here?

Because the parameterless toArray() method returns an object of type
object[], which could, just like Vector, hold all kinds of objects.

You want the toArray() method that takes a parameter, then it will
return an object of the type you give as paramter (and throw a
ClassCastException of the Vector contains any other types).



== 4 of 12 ==
Date:   Tues,   Nov 2 2004 4:53 am
From: Daniel Sjöblom <[EMAIL PROTECTED]> 

Joona I Palaste wrote:
>  It employs some compiler magic (which I'm not altogether
> familiar with) to make the returned object the same array class as
> the parameter. 

Not compiler magic, but reflection magic:

Array.newInstance(array.getClass().getComponentType(), size);

-- 
Daniel Sjöblom
Remove _NOSPAM to reply by mail



== 5 of 12 ==
Date:   Tues,   Nov 2 2004 4:52 am
From: Daniel Chirillo <[EMAIL PROTECTED]> 

I don't know enough about the internals to give you a complete answer. 
I'll let someone else provide more details.

Here's what I've noticed:  Although the compiler will allow you to 
downcast arrays, you will always get a ClassCassException if you 
downcast an array.  Note that you will not get a ClassCassException if 
you cast an individual element in an array; only if you cast the entire 
array.

Vector's toArray() returns an array of Objects.  Even though you know 
that there are only Strings in the Vector, you can't downcast the array 
that toArray() is returning.

Here is the proper way to do what you are trying to do:

Vector v = new Vector();
v.add( new String( "Nothing" ) );
String[] sv = ( String[] )v.toArray( new String[ v.size() ] );


DeMarcus wrote:
> 
> Look at this.
> 
> Vector v = new Vector();
> v.add( new String( "Nothing" ) );
> String[] sv = (String[])v.toArray();
> 
> Why do I get a ClassCastException here?
> 
> Thanks
> Daniel
> 
> 



== 6 of 12 ==
Date:   Tues,   Nov 2 2004 4:57 am
From: DeMarcus <[EMAIL PROTECTED]> 



Joona I Palaste wrote:

> DeMarcus <[EMAIL PROTECTED]> scribbled the following:
> 
>>Look at this.
> 
> 
>>Vector v = new Vector();
>>v.add( new String( "Nothing" ) );
>>String[] sv = (String[])v.toArray();
> 
> 
>>Why do I get a ClassCastException here?
> 
> 
> Because what you get is an Object[], and String[] and Object[] aren't
> compatible types. If they were, you could have an Object[] reference
> referring to a String[] object, and use this to set one of the
> elements to refer to some other type of object than String - major
> bummer.
> The toArray() method has a different version taking one array
> parameter. It employs some compiler magic (which I'm not altogether
> familiar with) to make the returned object the same array class as
> the parameter. You only need an array - it doesn't have to contain
> anything. I usually do this:
> 
> String[] sv = (String[])v.toArray(new String[0]);
> 

Thanks Joona.
One can wonder who on earth have use for the toArray() I tried to use.







== 7 of 12 ==
Date:   Tues,   Nov 2 2004 4:58 am
From: DeMarcus <[EMAIL PROTECTED]> 



Michael Borgwardt wrote:

> DeMarcus wrote:
> 
>>
>> Look at this.
>>
>> Vector v = new Vector();
>> v.add( new String( "Nothing" ) );
>> String[] sv = (String[])v.toArray();
>>
>> Why do I get a ClassCastException here?
> 
> 
> Because the parameterless toArray() method returns an object of type
> object[], which could, just like Vector, hold all kinds of objects.
> 
> You want the toArray() method that takes a parameter, then it will
> return an object of the type you give as paramter (and throw a
> ClassCastException of the Vector contains any other types).

Thanks Michael.




== 8 of 12 ==
Date:   Tues,   Nov 2 2004 4:49 am
From: guest <[EMAIL PROTECTED]> 

> String[] sv = (String[])v.toArray(new String[0]);


That is stupidly inefficient. Use:
String[] sv = (String[])v.toArray(new String[v.size()]);



== 9 of 12 ==
Date:   Tues,   Nov 2 2004 5:36 am
From: Joona I Palaste <[EMAIL PROTECTED]> 

guest <[EMAIL PROTECTED]> scribbled the following:
>> String[] sv = (String[])v.toArray(new String[0]);

> That is stupidly inefficient. Use:
> String[] sv = (String[])v.toArray(new String[v.size()]);

I was under the impression that only the class of the object being
passed to toArray() mattered. Do you have a JLS citation or test results
to prove this, or are you simply guessing?

-- 
/-- Joona Palaste ([EMAIL PROTECTED]) ------------- Finland --------\
\-------------------------------------------------------- rules! --------/
"The obvious mathematical breakthrough would be development of an easy way to
factor large prime numbers."   
   - Bill Gates



== 10 of 12 ==
Date:   Tues,   Nov 2 2004 5:39 am
From: Michael Borgwardt <[EMAIL PROTECTED]> 

Joona I Palaste wrote:
>>>String[] sv = (String[])v.toArray(new String[0]);
> 
>>That is stupidly inefficient. Use:
>>String[] sv = (String[])v.toArray(new String[v.size()]);
> 
> I was under the impression that only the class of the object being
> passed to toArray() mattered. Do you have a JLS citation or test results
> to prove this, or are you simply guessing?

How about the API doc for the method:

Parameters:
     a - the array into which the elements of this list are to be stored, if it is big 
enough; otherwise, a new array of the same runtime type is allocated for this purpose.


However, I wouldn't call it "stupidly inefficient" either - in most cases it
makes so little difference that it's not worth wasting  a thought on.



== 11 of 12 ==
Date:   Tues,   Nov 2 2004 5:56 am
From: Joona I Palaste <[EMAIL PROTECTED]> 

Michael Borgwardt <[EMAIL PROTECTED]> scribbled the following:
> Joona I Palaste wrote:
>>>>String[] sv = (String[])v.toArray(new String[0]);
>> 
>>>That is stupidly inefficient. Use:
>>>String[] sv = (String[])v.toArray(new String[v.size()]);
>> 
>> I was under the impression that only the class of the object being
>> passed to toArray() mattered. Do you have a JLS citation or test results
>> to prove this, or are you simply guessing?

> How about the API doc for the method:

> Parameters:
>      a - the array into which the elements of this list are to be stored, if it is 
> big 
> enough; otherwise, a new array of the same runtime type is allocated for this 
> purpose.

Thanks. Serves me right.

> However, I wouldn't call it "stupidly inefficient" either - in most cases it
> makes so little difference that it's not worth wasting  a thought on.

Right you are. I just tried both ways with a list of one hundred
thousand elements, repeated ten thousand times. Guess how much using
the array passed in saved me in contrast to constructing a new array?
About 0.34%. IOW, one three-hundredth. Not worth losing sleep over.

-- 
/-- Joona Palaste ([EMAIL PROTECTED]) ------------- Finland --------\
\-------------------------------------------------------- rules! --------/
"He said: 'I'm not Elvis'. Who else but Elvis could have said that?"
   - ALF



== 12 of 12 ==
Date:   Tues,   Nov 2 2004 6:07 am
From: "Chris Uppal" <[EMAIL PROTECTED]> 

Joona I Palaste wrote:

> Right you are. I just tried both ways with a list of one hundred
> thousand elements, repeated ten thousand times. Guess how much using
> the array passed in saved me in contrast to constructing a new array?
> About 0.34%. IOW, one three-hundredth. Not worth losing sleep over.

Since the array of size 100K is going to be allocated (and intialised) anyway,
however you express it, the real difference is in the allocation, or not, of
the 0-sized array.  The allocation (and intialisation) of a 0-sized array is
"obviously" going to be tiny in comparison with a 100K array. If you want the
difference to show up better, compare the case where the input has only 1 or 2
elements.  (Not that I can imagine a context where the difference /would/ make
a difference, but at least you'd get a bigger percentage number from your tests
;-)

    -- chris






==========================================================================
TOPIC: Question about wait
http://groups-beta.google.com/group/comp.lang.java.programmer/browse_thread/thread/c3b941d1ad39c7b8
==========================================================================

== 1 of 3 ==
Date:   Tues,   Nov 2 2004 4:42 am
From: "Neutrino" <[EMAIL PROTECTED]> 

Hello,
I am using a thread blocked for a maximum of three seconds using the wait
(timeout) function. This thread can also be unblocked by an another thread
using notify(). It works correctly, but I would like to known if the thread
is unblocked because the timeout or the notify call. Is there a simple way
to know it, when the thread returns from the wait function ?
Thanks
AR






== 2 of 3 ==
Date:   Tues,   Nov 2 2004 4:16 am
From: Gordon Beaton <[EMAIL PROTECTED]> 

On Tue, 2 Nov 2004 13:42:20 +0100, Neutrino wrote:
> I am using a thread blocked for a maximum of three seconds using the
> wait (timeout) function. This thread can also be unblocked by an
> another thread using notify(). It works correctly, but I would like
> to known if the thread is unblocked because the timeout or the
> notify call. Is there a simple way to know it, when the thread
> returns from the wait function ?

Have the notifier set a flag before calling notify(). You should
normally do that anyway whenever you use wait() and notify().

Presumably you're waiting for some "thing" to occur, and notify() is
just an indication that now is a good time to check whether it has.
It's usually not notify() itself that you're interested in.

/gordon

-- 
[  do not email me copies of your followups  ]
g o r d o n + n e w s @  b a l d e r 1 3 . s e



== 3 of 3 ==
Date:   Tues,   Nov 2 2004 5:16 am
From: NOBODY <[EMAIL PROTECTED]> 

On 02 Nov 2004, you wrote in comp.lang.java.programmer:

> Hello,
> I am using a thread blocked for a maximum of three seconds using the
> wait (timeout) function. This thread can also be unblocked by an
> another thread using notify(). It works correctly, but I would like to
> known if the thread is unblocked because the timeout or the notify
> call. Is there a simple way to know it, when the thread returns from
> the wait function ? Thanks
> AR
> 


You cannot override notify, but you could wrap it in another method (i
don't know, like 'flaggedNotify()'). (or you must wrap the code that
owns and manipulate the monitor). 

Hold a boolean latch to document the notify was raised. That is pretty
much the same mecanism as for interrupted() that I'm suggesting. 

public class FlaggedNotify {
        boolean flagNotify = false;

        public final void flaggedNotify() {
                flagNotify=  true;
                notify();
        }
        
        public final boolean isNotified() {
                return flagNotify;
        }
        
        public final boolean notified() {
                try {return flagNotify;} finally {flagNotify = false;}
        }
        
        public static void main(String[] args) throws Exception {
                final FlaggedNotify f = new FlaggedNotify();
                
                Thread t = new Thread() {
                        public void run() {
                                synchronized(f) {
                                        while(!f.notified()) {
                                                long t = System.currentTimeMillis();
                                                try {f.wait(3000);}
                                                catch(InterruptedException e) {
                                                        e.printStackTrace();
                                                }
                                                long d = System.currentTimeMillis() - 
t;
                                                System.out.println("awake after "+d);
                                        }
                                        
                                        System.out.println(f.isNotified());
                                }
                        }
                };
                t.start();
                
                for(int i=0; i<3; i++) {
                        Thread.sleep(1000);
                        synchronized(f) {
                                f.notify();
                        }
                }
                
                Thread.sleep(1111);
                synchronized(f) {
                        f.flaggedNotify();
                }
        }
}




==========================================================================
TOPIC: A question to parse HTML files
http://groups-beta.google.com/group/comp.lang.java.programmer/browse_thread/thread/f5792f3bd809986a
==========================================================================

== 1 of 1 ==
Date:   Tues,   Nov 2 2004 5:31 am
From: John <[EMAIL PROTECTED]> 

mike wrote:

> thanks for your reply.
> regards:
> 
> HTML document->Jtidy api->XHTML document
> since XHTML document is an application of XML.
> 
> So I can use java xml api or any other xml parser
> or other xml tool to parse the XHTML document.
> 
> Am I right?
> 
> Or there is something wrong with my idea.
> 
> thank you
> best wishes

You are right. The XHTML document will be parsed into a tree which makes 
it easy to navigate around the document. Once you start trying to make 
sense of the parsed document (or documents), you will see how 
effectively the combination of your original document and jtidy has 
captured the original document's structure.

good luck.

john




==========================================================================
TOPIC: MIDLet newbie questions
http://groups-beta.google.com/group/comp.lang.java.programmer/browse_thread/thread/4fe913f96a7b75ac
==========================================================================

== 1 of 1 ==
Date:   Tues,   Nov 2 2004 5:37 am
From: Martin Brehovsky <[EMAIL PROTECTED]> 


> 
> Is it a good or bad idea to do my development in Eclipse (2.1.3)? I'm not
> sure if it would be better to keep my Midlet development activities separate
> from Eclipse or not. If I am better off to avoid Eclipse, how should I do my
> development? (I am not afraid of using the command line if that is better.)
> 

Why not to give a try to NetBeans 4.0 beta with it's mobility support. 
AFAIK this tool has currently the most extensive support for developing 
MIDP applications and very stable debugging support (even things like 
on-device debugging on SonyEricsson). And it comes with the latest 
wireless toolkit, which supports 3D api and many other things.

For details look at <http://www.netbeans.org/kb/articles/mobility.html>. 
On this page there is also a ling from which you can download the pack.

B.



=======================================================================

You received this message because you are subscribed to the
Google Groups "comp.lang.java.programmer".  

comp.lang.java.programmer
[EMAIL PROTECTED]

Change your subscription type & other preferences:
* click http://groups-beta.google.com/group/comp.lang.java.programmer/subscribe

Report abuse:
* send email explaining the problem to [EMAIL PROTECTED]

Unsubscribe:
* click http://groups-beta.google.com/group/comp.lang.java.programmer/subscribe


=======================================================================
Google Groups: http://groups-beta.google.com 

Reply via email to