Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Запуск процесса


Автор: Антоннио 6.5.2010, 12:21
 Хочу создать программку имитирующую волну на изображении, сам эффект волны уже создал(нужно в параметрах его доработать), а вот теперь пытаюсь запустить его, то есть чтобы волна пробегала по изображению...
создаю класс, делаю его Runnable - но от чего-то поток не запускается да и ошибку не выдает... ?
 Вот сам код:
Код

// Изменение масштаба части изображения

import static java.awt.Color.*;

import java.awt.Image;
import java.awt.Color;
import java.awt.Cursor;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Rectangle;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseWheelEvent;
import java.awt.event.MouseWheelListener;
import java.awt.event.MouseMotionAdapter;
import java.awt.event.MouseEvent;
import java.awt.image.BufferedImage;

import javax.imageio.ImageIO;
import java.io.File;
import java.io.IOException;

import javax.swing.JComponent;
import javax.swing.JEditorPane;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;

import java.awt.AlphaComposite;
import java.awt.Graphics2D;

class PreviewZoomImage extends JFrame {
    private Image image;
    private JLabel drawLabel;    
    // ширина изображения
    private int width;
    // высота изображения
    private int height;
    // копия буфера изображения
    private BufferedImage bufferedImage;
    // цвет пикселя
    private Color color;
    //коэфициент света
    private int conf=3;
    public PreviewZoomImage() {
        setTitle("PreviewImage");
        

        try {
            image = ImageIO.read(new File("diablo_3_icon.jpg"));
            bufferedImage = ImageIO.read(new File("diablo_3_icon.jpg"));
        } catch (IOException ex) {
            ex.printStackTrace();
        }

        width = image.getWidth(this);
        height = image.getHeight(this);
        setLocationRelativeTo(null);
        setSize(width, height);

        setMaximizedBounds(new Rectangle(width, height));

        drawLabel = new DrawPanel();

        add(drawLabel);

        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setVisible(true);
    }

    public static void main(String[] args) {
        try {
            UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
        } catch (Exception e) {
        }
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                JFrame frame = new PreviewZoomImage();
                frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
            }
        });
    }
    
    public class DrawPanel extends JLabel implements Runnable {
        
        private int check=1;
        
        @Override
        public void run() {
            check=0;
            while (check<300) {
                check+=1;
                repaint();
                try {
                    Thread.sleep(5);
                } catch (InterruptedException ex) {
                }
            }
        }
        
        private long t = System.nanoTime();
        
        public void paintComponent(Graphics g) {
            
            long tm = System.nanoTime() - t;
            System.out.println(check);
            g.drawImage(image, 0, 0, width, height, null);
            g.setColor(color);
            for ( int i=0 ; i< 30 ; i++ ){
                double x = ( Math.PI/2 )*( (double) (i/30) );
                for ( int j=0 ; j < height ; j++ ) {
                    int c = bufferedImage.getRGB(i+check, j);
                    int  red = (c & 0x00ff0000) >> 16;
                    int  green = (c & 0x0000ff00) >> 8;
                    int  blue = c & 0x000000ff;
                    double dR,dG,dB;
                    dR=-30*conf*Math.sin( x );
                    dG=-30*conf*Math.sin( x );
                    dB=-30*conf*Math.sin( x );
                    if (red + dR < 0) red = 0;
                    else if (red + dR > 255) red = 255;
                    else red += dR;
                    if (green + dG < 0) green = 0;
                    else if (green + dG > 255) green = 255;
                    else green += dG;
                    if (blue + dB < 0) blue = 0;
                    else if (blue + dB > 255) blue = 255;
                    else blue += dB;
                    color = new Color(red,green,blue);
                    g.setColor(color);
                    g.drawLine(i+check, j, i+check, j);
                }
            }
            
            for (int i=0;i<30;i++){
                double x = (Math.PI/2 );
                x *= (double) (30-i)/30;
                for (int j=0;j<height;j++) {
                    int c = bufferedImage.getRGB(i+30+check, j);
                    int  red = (c & 0x00ff0000) >> 16;
                    int  green = (c & 0x0000ff00) >> 8;
                    int  blue = c & 0x000000ff;
                    double dR,dG,dB;
                    dR=30*conf*Math.sin( x );
                    dG=30*conf*Math.sin( x );
                    dB=30*conf*Math.sin( x );
                    if (red + dR < 0) red = 0;
                    else if (red + dR > 255) red = 255;
                    else red += dR;
                    if (green + dG < 0) green = 0;
                    else if (green + dG > 255) green = 255;
                    else green += dG;
                    if (blue + dB < 0) blue = 0;
                    else if (blue + dB > 255) blue = 255;
                    else blue += dB;
                    color = new Color(red,green,blue);
                    g.setColor(color);
                    g.drawLine(i+30+check, j, i+30+check, j);
                }
            }

        }
        
        
    }
    
}

Автор: MAXIMUS00 12.5.2010, 18:38
Код

new Thread(Runnable runnable).start();

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