Results 1 to 2 of 2
  1. #1
    Join Date
    Jun 2011
    Posts
    2
    Rep Power
    0

    Default Java applet not working on windows 7

    We have a problem similar to this
    Clean boot doesn't help and the unchecking of services doesn't help ether.
    We have a Java applet that's working correctly on xp but isn't working correctly on win 7.
    The applet runs and the browser asks you to accept the certifiket but the buttons are hidden and appears onley on mouse rollover.
    It doesen't work in browser safe mode but it works in windows safe mode.
    So its functioning but it simply isnt shown correctly.
    This is the java code, the code is run in the webb browser as a signed applet:

    Java Code:
    import java.awt.Container;
    import java.awt.FlowLayout;
    import java.awt.Font;
    import java.awt.FontMetrics;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.Image;
    import java.awt.RenderingHints;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.image.BufferedImage;
    import java.awt.image.RescaleOp;
    import java.io.BufferedReader;
    import java.io.ByteArrayOutputStream;
    import java.io.DataOutputStream;
    import java.io.File;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.net.HttpURLConnection;
    import java.net.URL;
    import java.util.StringTokenizer;
    import javax.imageio.ImageIO;
    import javax.imageio.ImageWriteParam;
    import javax.imageio.ImageWriter;
    import javax.imageio.stream.ImageOutputStream;
    import javax.imageio.stream.MemoryCacheImageOutputStream;
    import javax.swing.JApplet;
    import javax.swing.JButton;
    import javax.swing.JOptionPane;
    import javax.swing.JTextArea;
    import javax.swing.JTextField;
    
    @SuppressWarnings("serial")
    public class AppletEE extends JApplet {
    	private JTextField tf = new JTextField("", 15);
    	private JTextArea ta = new JTextArea( "",8,40);
    	private JButton button1 = new JButton("Preview");
    	private JButton button2 = new JButton("Generate Image");
    	Font font1;
    	Font font2;
    	BufferedImage bgImage;
    	BufferedImage fgImage;
    	BufferedImage overlayedImage;
    	final int xc=170;
    	public void init() {
    		this.setSize(450, 550);
    		Container cp = getContentPane();
    		font1= new Font("Arial", Font.PLAIN,  50);
    		font2= new Font("Arial", Font.PLAIN,  30);
    	    cp.setLayout(new FlowLayout());
    	    cp.add(tf);
    	    cp.add(ta);
    	    cp.add(button1);
    	    cp.add(button2);
    	    button1.addActionListener(new ActionListener() {
    		    public void actionPerformed(ActionEvent e) {
    				try {
    			        // Read from a URL
    			        URL url = new URL("http://192.168.1.2/bg.png");
    			        bgImage = imageToBufferedImage(ImageIO.read(url));
    			    } catch (IOException e1) {
    			    	System.out.println("url error");
    			    }
    			    overlayedImage=bgImage;	
    		    	generate();	
    		    	repaint();
    		    }
    		});
    	    button2.addActionListener(new ActionListener() {
    		    public void actionPerformed(ActionEvent e) {
    				try {
    			        // Read from a URL
    			        URL url = new URL("http://192.168.1.2/bg.png");
    			        bgImage = imageToBufferedImage(ImageIO.read(url));
    			    } catch (IOException e1) {
    			    	System.out.println("url error");
    			    }
    			    overlayedImage=bgImage;
    		    	generate();
    		    	save();
    		        tf.setText("");
    		        ta.setText("");
    		    }
    		});
    	}
    	public void paint(Graphics g){
    		g.drawImage(overlayedImage,0,200,450,337,this);
    
    	}
    	public void generate(){
        	
        	if(tf.getText().length()==0){
        		tf.setText("  ");
        	}
        	FontMetrics fm = this.getFontMetrics(font1); 
    		BufferedImage imageA = new BufferedImage(fm.stringWidth(tf.getText()), (int) (fm.getHeight()*1.5), BufferedImage.OPAQUE);
    		Graphics2D g = imageA.createGraphics();
    		g.setFont(font1);
    		g.drawString(tf.getText(), 0, fm.getHeight());
    		g.dispose();
    		RescaleOp op=new RescaleOp(-1.0f, 255f,null);
    		imageA=op.filter(imageA, null);
    		int lines=ta.getLineCount();
            if(lines>8){
            	lines=8;
            }
    		int z=(int) ((bgImage.getHeight()-(font1.getSize()*1.5+font2.getSize()*1.5*lines))/2-font2.getSize());
            overlayedImage=overlayImages(bgImage, imageA, ((bgImage.getWidth())/2-(imageA.getWidth())/2), z);		       
            int enter=0;
            char[] temp0=new char[ta.getText().length()];
            ta.getText().getChars(0, ta.getText().length(), temp0, 0);
            if(ta.getText().length()>4){	     	
            	for(int t=0; t<ta.getText().length()-1; t++){
            		if(temp0[t]=='\n'&&temp0[t+1]=='\n'){
            			enter++;
            		}
            	}
            	if(enter!=0){
            		temp0=new char[ta.getText().length()+enter];
            		ta.getText().getChars(0, ta.getText().length(), temp0, 0);
            		for(int t=0; t<ta.getText().length()-1; t++){
                		if(temp0[t]=='\n'&&temp0[t+1]=='\n'){
                			for(int u=temp0.length-1; u>t; u--){
                				temp0[u]=temp0[u-1];
                			}
                			temp0[t+1]=' ';
                		}
                	}
            	}
            } 
            String s[] = new String[10];
            StringTokenizer st=new StringTokenizer(new String(temp0),"\n");
            int r=0;
            boolean done=false;
            while(st.hasMoreTokens()&&done==false){
            	s[r]=st.nextToken();
            	while(s[r].length()>47&&done==false){
            		char[] temp1=new char[s[r].length()-47];
            		char[] temp2=new char[47];
            		s[r].getChars(47, s[r].length(), temp1, 0);
            		s[r].getChars(0, 47, temp2, 0);
            		s[r]=new String(temp2);    		
            		s[r+1]=new String(temp1);	
            		r++;
            		if(r>=8){
            			done=true;
            		}
            	}
            	r++;
            	System.out.print(r);
            	if(r>=8){
        			done=true;
        		}
            }    
            fm = this.getFontMetrics(font2); 
            BufferedImage textImage;
            for(int v=0; v<r; v++){      		
            	textImage = new BufferedImage(fm.stringWidth(ta.getText()), (int) (fm.getHeight()*1.5), BufferedImage.OPAQUE);
            	g = textImage.createGraphics();
            	g.setFont(font2);
            	g.drawString(s[v], 0, fm.getHeight());
            	g.dispose();
            	z=(int) ((bgImage.getHeight()-(font1.getSize()*1.5+font2.getSize()*1.5*lines))/2+font1.getSize()*1.5+font2.getSize()*1.5*v);
    			textImage=op.filter(textImage, null);
    			overlayedImage=overlayImages(overlayedImage, textImage, xc, z);
            }
    	}
    	public static BufferedImage imageToBufferedImage(Image im) {
    		BufferedImage bi = new BufferedImage(im.getWidth(null),im.getHeight(null),BufferedImage.TYPE_INT_RGB);
    		Graphics bg = bi.getGraphics();
    		bg.drawImage(im, 0, 0, null);
    		bg.dispose();
    		return bi;
    	}
    	public void save(){
    		if(overlayedImage!=null){
    			int v=0;
    			boolean found=false;
    			while(found==false){
    				try{
    					URL url = new URL("http://192.168.1.2/text" + v + ".png");
    			        ImageIO.read(url);
    					//ImageIO.read(new File(saveFilePath + "text" + v + ".png"));
    					v++;
    				}catch(Exception e){	
    					found=true;
    				}
    			}
    			String s=writeImage(overlayedImage, "http://192.168.1.2/text" + v + ".png", "png");
    			ta.setText(s);
    			overlayedImage.flush();
    		}else
    			System.out.print("Problem with overlay...");
    	}
    	public static BufferedImage overlayImages(BufferedImage bgImage, BufferedImage fgImage, int mr, int nr ){//lägger en bild på en annan
    		if(fgImage.getHeight()>bgImage.getHeight()||fgImage.getWidth()>fgImage.getWidth()){
    			JOptionPane.showMessageDialog(null, "Use smaller text size");
    			return null;
    		}
    		Graphics2D g=bgImage.createGraphics();
    		g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
    		g.drawImage(bgImage, 0, 0, null);
    		g.drawImage(fgImage, mr, nr, null);
    		g.dispose();
    		return bgImage;
    	}
    	public static BufferedImage readImage(String filelocation){
    		BufferedImage img=null;
    		try{
    			img=ImageIO.read(new File(filelocation));
    		}catch(IOException e){
    			e.printStackTrace();
    		}
    		return img;
    	}
    	public static String writeImage(BufferedImage img, String filelocation, String extension){
    		DataUpload du = new DataUpload();
    		boolean bo = du.UploadImage(filelocation, img);
    		int rc = du.GetResponseCode();
    	    String feedback = du.GetServerFeedback();
    	    return (""+bo+rc+feedback);  
    	}  
    } 
    
    class DataUpload{
    	  /** The field name as expected by the PHP script, equivalent to the name in the tag input type="file"
    	   * in an HTML upload form.
    	   */
    	  private static final String FIELD_NAME = "image";
    	  /** PHP script name. */
    	  // I hard-code it here, I suppose there is no need for several scripts per applet...
    	  private static final String SCRIPT_NAME = "Upload.php";
    	  /** URL path to the PHP script. */
    	  private static final String BASE_URL = "http://192.168.1.2/EE";
    	  private String boundary;
    	  private String uploadURL;
    	  /** The connection to the server. */
    	  private HttpURLConnection connection;
    	  /** The output stream to write the binary data. */
    	  private DataOutputStream output;
    
    	  DataUpload(){
    	    // Mime boundary of the various parts of the message.
    	    boundary = "-----DataUploadClass-----PhiLhoSoft-----" + System.currentTimeMillis();
    	    // We can add a optional parameters, eg. a string given by the user, parameters used, etc.
    	    uploadURL = BASE_URL + "/" + SCRIPT_NAME;// + "?optionalParam=value&foo=bar";
    	  }
    
    	  /** Pushes image to server. */
    	  boolean UploadImage(String fileName, BufferedImage image)
    	  {
    	    String imageType = null, imageMimeType = null;
    	    boolean bUseOtherMethod = false;
    	    if (fileName.endsWith("png"))
    	    {
    	      imageType = "png";
    	      imageMimeType = "image/png";
    	    }
    	    else if (fileName.endsWith("jpg"))
    	    {
    	      imageType = "jpg";
    	      imageMimeType = "image/jpeg";
    	    }
    	    else if (fileName.endsWith("jpeg"))
    	    {
    	      imageType = "jpeg";
    	      imageMimeType = "image/jpeg";
    	      bUseOtherMethod = true;
    	    }
    	    else
    	    {
    	      return false; // Unsupported image format
    	    }
    
    	    try
    	    {
    	      boolean isOK = StartPOSTRequest(fileName, imageMimeType);
    	      if (!isOK)
    	        return false;
    
    	      // Output the encoded image data
    	      if (!bUseOtherMethod)
    	      {
    	        // Uses the default method
    	        ImageIO.write(image, imageType, output);
    	      }
    	      else
    	      {
    	        // Alternative for better Jpeg quality control
    	        ByteArrayOutputStream baos = new ByteArrayOutputStream();
    
    	        java.util.Iterator iter = ImageIO.getImageWritersByFormatName(imageType);
    	        if (iter.hasNext())
    	        {
    	          ImageWriter writer = (ImageWriter) iter.next();
    	          ImageWriteParam iwp = writer.getDefaultWriteParam();
    	          iwp.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
    	          iwp.setCompressionQuality(1.0f);
    
    	          ImageOutputStream ios = new MemoryCacheImageOutputStream(baos);
    	          writer.setOutput(ios);
    	          writer.write(image);
    	          byte[] b = baos.toByteArray();
    	          output.write(b, 0, b.length);
    	        }
    	      }
    
    	      // And actually do the send (flush output and close it)
    	      EndPOSTRequest();
    	    }
    	    catch (Exception e)
    	    {
    	      e.printStackTrace();
    	      return false; // Problem
    	    }
    	    finally
    	    {
    	      if (output != null)
    	      {
    	        try { output.close(); } catch (IOException ioe) {}
    	      }
    	    }
    
    	    return true;  // OK
    	  }
    
    	  /** Reads output from server. */
    	  String GetServerFeedback()
    	  {
    	    if (connection == null)
    	    {
    	      // ERROR: Can't get server feedback without first uploading data!
    	      return null;
    	    }
    	    BufferedReader input = null;
    	    StringBuffer answer = new StringBuffer();
    	    try
    	    {
    	      input = new BufferedReader(new InputStreamReader(connection.getInputStream()));
    	      String answerLine = null;
    	      do
    	      {
    	        answerLine = input.readLine();
    	        if (answerLine != null)
    	        {
    	          answer.append(answerLine + "\n");
    	        }
    	      } while (answerLine != null);
    	    }
    	    catch (Exception e)
    	    {
    	      // Can display some feedback to user there, or just ignore the issue
    	      e.printStackTrace();
    	      return null;  // Problem
    	    }
    	    finally
    	    {
    	      if (input != null)
    	      {
    	        try { input.close(); } catch (IOException ioe) {}
    	      }
    	    }
    
    	    return answer.toString();
    	  }
    
    	  int GetResponseCode()
    	  {
    	    int responseCode = -1;
    	    if (connection == null)
    	    {
    	      // ERROR: Can't get server response without first uploading data!
    	      return -1;
    	    }
    	    // Note that 200 means OK
    	    try
    	    {
    	      responseCode = connection.getResponseCode();
    	    }
    	    catch (IOException ioe)
    	    {
    	    }
    	    return responseCode;
    	  }
    
    	  /*-- Private section --*/
    
    	  private boolean StartPOSTRequest(String fileName, String dataMimeType)
    	  {
    	    try
    	    {
    	      URL url = new URL(uploadURL); // throws MalformedURLException
    	      connection = (HttpURLConnection) url.openConnection();  // throws IOException
    	      // connection is probably of HttpURLConnection  type now
    
    	      connection.setDoOutput(true); // We output stuff
    	      connection.setRequestMethod("POST");  // With POST method
    	      connection.setDoInput(true);  // We want feedback!
    	      connection.setUseCaches(false); // No cache, it is (supposed to be) a new image each time, even if URL is always the same
    
    	      // Post multipart data
    	      // Set request headers
    	      // Might put something like "Content-Length: 8266"
    	      connection.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + boundary);
    	      // throws IllegalStateException, NullPointerException
    
    	      // Open a stream which can write to the URL
    	      output = new DataOutputStream(connection.getOutputStream());
    	      // the get throws IOException, UnknownServiceException
    
    	      // Write content to the server, begin with the tag that says a content element is coming
    	      output.writeBytes("--" + boundary + "\r\n"); // throws IOException
    
    	      // Describe the content:
    	      // filename isn't really important here, it is probably ignored by the upload script, or can be set to user name if logged in
    	      output.writeBytes("Content-Disposition: form-data; name=\"" + FIELD_NAME +
    	          "\"; filename=\"" + fileName + "\"\r\n");
    	      // Mime type of the data, like image/jpeg or image/png
    	      // Likely to be ignored by the PHP script (which can't trust such external info) but (might be) mandatory and nice to indicate anyway
    	      output.writeBytes("Content-Type: " + dataMimeType + "\r\n");
    	      // By default it is Base64 encoding (that's what most browsers use), but here we don't use this,
    	      // for simplicity sake and because it is less data to transmit. As long as destination server understands it...
    	      // See http://www.freesoft.org/CIE/RFC/1521/5.htm for details
    	      output.writeBytes("Content-Transfer-Encoding: binary\r\n\r\n");
    	    }
    	    catch (Exception e) // Indistinctly catch all kinds of exceptions this code can throw at us
    	    {
    	      // Can display some feedback to user there, or just ignore the issue
    	      e.printStackTrace();
    	      return false; // Problem
    	    }
    
    	    return true;
    	  }
    	  private boolean EndPOSTRequest()
    	  {
    	    try
    	    {
    	      // Close the multipart form request
    	      output.writeBytes("\r\n--" + boundary + "--\r\n\r\n");
    
    	      // And actually do the send (flush output and close it)
    	      output.flush(); // throws IOException
    	    }
    	    catch (Exception e) // Indistinctly catch all kinds of exceptions this code can throw at us
    	    {
    	      // Can display some feedback to user there, or just ignore the issue
    	      e.printStackTrace();
    	      return false; // Problem
    	    }
    
    	    return true;
    	  }
    	}

  2. #2
    Join Date
    Jun 2011
    Posts
    2
    Rep Power
    0

    Default

    As my school project I, with help, have created a remotely controlled real-time closed circuit TV system for the school so that teachers can post messages on TVs, sort of like an information board system. One way to leave a message is through a website with a java applet.

    The applet we made works fine on windows xp, but works curiously on windows 7. It runs in the browser and asks the client to accept the certificate, but when the user clicks on “run” the applet doesn’t come up. It’s there, the buttons come up if you move the mouse pointer over them and the text becomes visible if you press ctrl+a. It works too, all the functions work properly, if you can navigate. It works in windows 7 safe mode though. I’ve tried turning of services, making a “clean boot”, running the browser in safe mode and changing the html tags (applet, object, embed) and nothing’s working. It’s not the firewall or antivirus. It’s just something with windows 7. I need to fix it- half the teachers have windows 7.

    I’ve managed to narrow the problem down. The applet apparently works fine in windows 7 with the colors turned down to 16 bits. Doesn’t work in 32 bits mode on windows 7, but works in both modes on xp. Now, it’s not the graphic card – I’ve tested with others OSs on same computers. Firefox I can set to start in XPsp3 compatibility mode in properties and it works even in 32bit color mode on windows 7. But Internet Explorer can’t be set to start in the compatibility mode because “it’s part of this version of windows”… Due to this undesirable problem I will have to configure computers of the entire staff. I’ve even tried tweaking with the graphic card properties hoping there’d be a box to uncheck somewhere. Without positive outcome. Switching all computers to 16-bit mode seems pretty intrusive as it disables Windows Live Thumbnails and Aero Peak. I’m looking for a way to make it work for the teachers without them having to edit advanced settings or decreasing functionality of their computers. If there is an advanced setting to be changed, the schools computer service will do it.

    Does anyone have any suggestions?

Similar Threads

  1. Replies: 1
    Last Post: 02-19-2011, 08:36 AM
  2. Java Applet Not Working
    By OwlLady in forum Java Applets
    Replies: 14
    Last Post: 10-10-2010, 08:55 PM
  3. Replies: 1
    Last Post: 08-19-2010, 12:47 PM
  4. Replies: 9
    Last Post: 05-21-2010, 10:46 AM
  5. Replies: 0
    Last Post: 07-29-2008, 01:19 PM

Tags for this Thread

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •