Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Razbor stroki (is String poluchit' komandu) 
:(
    Опции темы
Гость_Sergey
  Дата 26.5.2005, 15:54 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Dobryi den. Proshu proshenie za translit.

Ochen' nujen sovet opytnyh programmistov.

Problema : nujno na letu generit' komandy. Kajetsya, v C++ byla funciya "eval" chtoby iz stroki, skajem "a=4; b=6;" mojno bylo poluchit' normalnyi ispolnyaemyi cod.

Mne eto neobhodimo v Java. V textovom faile ya chitayu nekie pravila, po kotorym ochen' legko generyatsya usloviya tipa "if (peremennaya1==...) { peremennaya2=5}" i t.d. No stroku ya sgenerit' mogu, a kak prevratit' ee v kod????

Chtoby delat' classy na letu, ya ispol'zuyu Class.forName().

Pro ostal'noe ne znayu.

Bolshoe spasibo!!!!
  Вверх
batigoal
Дата 26.5.2005, 16:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 24
Всего: 151



Гм. Можно, в принципе, делать вывод в файл .java, запускать компилятор, а потом - Class.forName(). Но вот осуществимо ли на практике?..






P.S. При вводе текста можно воспользоваться переключателем "транслит".


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
Orange
Дата 26.5.2005, 16:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 6.9.2004
Где: Russia, Moscow

Репутация: 4
Всего: 5



Код

import java.awt.*;
import java.awt.event.*;
import java.io.File;
import java.io.FileOutputStream;
import java.io.PrintWriter;
import java.io.IOException;
import java.lang.reflect.Method;
import java.lang.reflect.InvocationTargetException;
import java.util.Date;

/**
 * Program that lets you run a short segment of Java code.
 *
 * @author Shawn Silverman
 */
public class JavaStatement extends Frame implements ActionListener {
    /**
     * Main entry point.
     */
    public static void main(String[] args) {
        // Create the frame and set it to close on exit

        Frame f = new JavaStatement();
        f.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                Window w = e.getWindow();
                w.hide();
                w.dispose();
                System.exit(0);
            }
        });

        f.pack();
        f.show();
    }

    /** The compiler object. */
    private com.sun.tools.javac.Main javac = new com.sun.tools.javac.Main();

    private TextArea text;
    private Button runBtn;

    /**
     * Create a new JavaStatement window.
     */
    public JavaStatement() {
        super("Java Statement");

        // Create the components

        text = new TextArea(5, 45);
        text.setFont(new Font("Monospaced", Font.PLAIN, 12));

        runBtn = new Button("Run!");
        runBtn.addActionListener(this);

        // Lay them out

        this.add(text, BorderLayout.CENTER);
        Panel p = new Panel();
        p.add(runBtn);
        this.add(p, BorderLayout.SOUTH);

        this.setBackground(SystemColor.control);
    }

    /**
     * Shows a message to the user.
     *
     * @param msg the message
     */
    private void showMsg(String msg) {
        System.err.println(msg);
    }

    /**
     * Compiles and runs the short code segment.
     *
     * @throws IOException if there was an error creating the source file.
     */
    private void doRun() throws IOException {
        // Create a temp. file

        File file = File.createTempFile("jav", ".java",
                new File(System.getProperty("user.dir")));

        // Set the file to be deleted on exit

        file.deleteOnExit();

        // Get the file name and extract a class name from it

        String filename = file.getName();
        String classname = filename.substring(0, filename.length()-5);

        // Output the source

        PrintWriter out = new PrintWriter(new FileOutputStream(file));
        out.println("/**");
        out.println(" * Source created on " + new Date());
        out.println(" */");
        out.println("public class " + classname + " {");
        out.println("    public static void main(String[] args) throws Exception {");

        // Your short code segment

        out.print("        "); out.println(text.getText());

        out.println("    }");
        out.println("}");

        // Flush and close the stream

        out.flush();
        out.close();

        // Compile

        String[] args = new String[] {
            "-d", System.getProperty("user.dir"),
            filename
        };
        int status = javac.compile(args);

        // Run

        switch (status) {
            case 0:  // OK
                // Make the class file temporary as well

                new File(file.getParent(), classname + ".class").deleteOnExit();

                try {
                    // Try to access the class and run its main method

                    Class clazz = Class.forName(classname);
                    Method main = clazz.getMethod("main", new Class[] { String[].class });
                    main.invoke(null, new Object[] { new String[0] });
                } catch (InvocationTargetException ex) {
                    // Exception in the main method that we just tried to run

                    showMsg("Exception in main: " + ex.getTargetException());
                    ex.getTargetException().printStackTrace();
                } catch (Exception ex) {
                    showMsg(ex.toString());
                }
                break;
            case 1: showMsg("Compile status: ERROR"); break;
            case 2: showMsg("Compile status: CMDERR"); break;
            case 3: showMsg("Compile status: SYSERR"); break;
            case 4: showMsg("Compile status: ABNORMAL"); break;
            default:
                showMsg("Compile status: Unknown exit status");
        }
    }

    /**
     * Listens to actions from the run button.
     */
    public void actionPerformed(ActionEvent e) {
        Object source = e.getSource();

        if (runBtn == source) {
            // Disable the run button while we're running

            runBtn.setEnabled(false);
            try {
                doRun();
            } catch (IOException ex) {
                ex.printStackTrace();
            }
            runBtn.setEnabled(true);
        }
    }
}

--------------------
Пару дней назад я познакомился с мальчиком......
PM MAIL ICQ   Вверх
Гость_Sergey
Дата 26.5.2005, 16:57 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Спасибо за совет про транслит:-) Смешно писать, но зато работает.

А про вывод в файл... Хорошо, напишите тогда, что именно вы имеете в виду. И как перекомпилировать на лету?

Неужели нет другого способа????
  Вверх
batigoal
Дата 26.5.2005, 17:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 24
Всего: 151



Посмотри код Orange - я имел в виду именно это. Не подойдет?


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
Шмель
Дата 26.5.2005, 17:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 179
Регистрация: 16.4.2004

Репутация: 3
Всего: 18



Тут можно использовать Beanshell - интерпретатор Java
--------------------
будешь на Земле - заходи
PM MAIL ICQ   Вверх
Гость_Sergey
Дата 26.5.2005, 17:12 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Спасибо!

Думаю, это именно то, что надо!
  Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0449 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.