Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Апплеты > Апплет и кодировка! Не работает win-1251 на кнопке


Автор: Cross 4.5.2009, 15:49
Здравствуйте!

У меня после переустановки системы появилась проблема:

в апплете на кнопке почему-то вместо русских букв отображаются квадратики.
Причем при запуске апплета из под Eclipse - с буквами все нормально.
Проблемы начинаются при запуске апплета в браузере (проверяла и в FireFox, и в IE 7.0)

Привожу фрагмент кода!

Код

public void start() {
        
        Button b = new Button("Построить график функции");

        b.addActionListener(this);
        add(b);
        c1 = new Float(2.92); 
        c2 = new Float(-1.46);
        r1 = new Float(2.2);
        r2 = new Float(1.26);
        int m = 1; 
        data = setFunction(START, END, SHAG, MNOZH, c1,c2,r1,r2,m);
        min = minValue(data);
        System.out.println(min);
    }


Код запуска апплета:

Код

<applet  
code="mitraGraphicClass.class" archive="myTest.jar" width = "600" height = "300" name="mitraGraphicClass" mayscript="true">
</applet>

Автор: Arahnus 17.5.2009, 12:45
Такая же проблема, но еще и с TextArea.

Код

//package untitled1;
import java.util.*;
import java.io.*;
import java.lang.*;
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
import borland.jbcl.layout.*;
import borland.jbcl.control.*;

public class sv1 extends Applet implements ActionListener{
  XYLayout xYLayout1 = new XYLayout();
  boolean isStandalone = false;
  public String msg;
  Button get,put,getT,putT;
  TextArea ta;


  //Get a parameter value
  public String getParameter(String key, String def) {
    return isStandalone ? System.getProperty(key, def) :
      (getParameter(key) != null ? getParameter(key) : def);
  }

  //Construct the applet
  public sv1() {
  }

  //Initialize the applet
  public void init() {
    try { jbInit(); } catch (Exception e) { e.printStackTrace(); }
  setLayout(new FlowLayout(FlowLayout.CENTER));
  Button get = new Button("Get");
  Button put = new Button("Put");
  Button getT = new Button("GetTxt");
  Button putT = new Button("PutTxt");
  Button prop = new Button("Property");
  setLayout(new FlowLayout(FlowLayout.LEFT));

  ta=new TextArea("пример текста",10,30); // <-- Пишет абракадаброй

  add(ta);
  add(put);
  add(get);
  add(getT);
  add(putT);
  add(prop);
  String tt=ta.getText();

  get.addActionListener(this);
  //
  put.addActionListener(this);
  putT.addActionListener(this);
  getT.addActionListener(this);

  }
  public void actionPerformed(ActionEvent ae){
   String str=ae.getActionCommand();

   if(str.equals("Get"))ta.setText(getByt());
   else if(str.equals("Put"))putByt(ta.getText());
   else if(str.equals("GetTxt"))ta.setText(getTxt());
   else if(str.equals("PutTxt"))putTxt(ta.getText());

   repaint();
  }
  //Component initialization
  public void jbInit() throws Exception{
    xYLayout1.setWidth(400);
    xYLayout1.setHeight(300);
    this.setLayout(xYLayout1);
  }

  //Start the applet
  public void start() {
  }

  //Stop the applet
  public void stop() {
  }

  //Destroy the applet
  public void destroy() {
  }

  //Get Applet information
  public String getAppletInfo() {
    return "Applet Information";
  }

  //Get parameter info
  public String[][] getParameterInfo() {
    return null;
  }
  public void paint(Graphics g){


  g.drawString(msg,10,100);
  }
  public void putTxt(String s){
   try{
   ByteArrayOutputStream f=new ByteArrayOutputStream();
   byte b[]=s.getBytes();
   f.write(b);
   b=f.toString("Windows-1251").getBytes("Windows-1251");
   f.reset();
   f.write(b);
   OutputStream f2=new FileOutputStream("text_for_java.txt");
   f.writeTo(f2);
   f2.close();
   }catch(IOException e){}
  }
  
  public String getTxt(){
   String t="";
   try{

    InputStream f2=new FileInputStream("text_for_java.txt");
    int a= f2.available();
    byte b[]=new byte[a];
    DataInputStream bao=new DataInputStream(f2);

    bao.read(b);

    //ta.setText(new String(b,"UTF8"));
    t+=new String(b);
    bao.close();
    }
    catch(IOException ioe){}

  return t;
  }


  public void putByt(String t){
    try{
    //String t=ta.getText();
    byte buf[]=t.getBytes("Windows-1251");
    //byte buf[]=t.getBytes();
    OutputStream f2=new FileOutputStream("text_for_java.dat");
    DataOutputStream bao=new DataOutputStream(f2);

    bao.writeBytes(new String(buf,"Windows-1251"));
     //bao.writeBytes(t);
    bao.close();
    }
    catch(IOException ioe){}
  }

  public String getByt(){
   String t="";
   try{

    InputStream f2=new FileInputStream("text_for_java.dat");
    int a= f2.available();
    byte b[]=new byte[a];
    DataInputStream bao=new DataInputStream(f2);

    bao.read(b);

    //ta.setText(new String(b,"UTF8"));
    t+=new String(b,"Windows-1251");
    bao.close();
    }
    catch(IOException ioe){}

  return t;
  }

  //Main method
  static public void main(String[] args) {
    sv1 applet = new sv1();
    applet.isStandalone = true;
    DecoratedFrame frame = new DecoratedFrame();
    frame.setTitle("Аплет LEV.SU");
    frame.add(applet, BorderLayout.CENTER);
    applet.init();
    applet.start();
    //applet.paint();
    frame.pack();
    Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
    frame.setLocation((d.width - frame.getSize().width) / 2, (d.height - frame.getSize().height) / 2);
    frame.setVisible(true);
  }
}




В форме TextArea текст вводиться с клавиатуры вот так ïðèìåð
Код компилил на JBuilder 1.1 
Конечно устаревшая вешь но по идее это ведь не должно играть роли.

Автор: Arahnus 17.5.2009, 18:06
Получается что кодировка локали и кодировка аплета различаются.

Только вот как узнать в какой кодировке работает аплет?

Вот это кодировка локали:
Код

String pp=System.getProperty("file.encoding");


На винде показывает Cp1251 но проблему не решает
Исходный код тоже в Cp1251. По крайней мере в ней сохраняется.
При попытке перекодировать в ISO8859_1 текст вообще пропадает

Автор: math64 19.5.2009, 12:24
Строка находится в исходнике - смотрите кодировку исходника

Автор: Arahnus 26.5.2009, 20:47
Цитата

Строка находится в исходнике - смотрите кодировку исходника


Исходник сохраняется в Cp1251
Тоесть кодировка исходника та же. Ладно, похоже это зависит от среды выполнения Так как настройки JBuilder 1.1  тоже так же абракадаброй пишет.

Автор: math64 27.5.2009, 10:39
Сравнивай кодировку компилятора и кодировку редактора - они у тебя различаются

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)