Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.03.2013, 16:20   #1
Neketek
Пользователь
 
Регистрация: 22.03.2012
Сообщений: 26
По умолчанию Java, как избежать статического main

Суть дела в чем, дорогие мои собратья по цеху, мне необходимо реализовать работу своего класса , который по является наследником Frame, так, что бы не использовать статический метод класса, что бы он мог запускаться , как апплет или программы из библиотеки асм. Самая главная проблема состоит в том , что я знаю только один способ запустить приложение для самостоятельной работы - это статический метод main, который не может работать с конкретным классом. Мне интересно то,как сделать так , что бы в наследнике , ниже описанного класса, можно было бы переопределить метод,допустим run, так , что бы он мог воздействовать на именно этот Frame.

Код:
package neketek.graphic.GraphicsProg;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;

import neketek.MainFrameListener.*;
import neketek.graphic.engine.GObject;
import neketek.graphic.engine.GRect;
public  class MainFrame extends Frame implements FrameChange{
	MainFrame(){
		this("Default",640,480);
	}
	MainFrame(String name,int x , int y){
		super(name);
		this.setSize(x,y);
		this.setVisible(true);
		FrameListener.add(this);
	}
	public static void main(String args[]){ /// вот он то мне не нравится !
	}
	public void createBuffer(){
		buffer = this.createImage(this.getWidth(),this.getHeight());
	}
	public void paint(Graphics g){
		if(!this.created){
			this.createBuffer();
			this.created = true;
		}
		Graphics screen = g;
			g = buffer.getGraphics();
			g.setColor(getBackground());
			g.fillRect(0, 0,this.getWidth(),this.getHeight());
			g.setColor(Color.black);
		for(GObject go:this.mass.mass){
			this.paintingVariants(go, g);
		}
		screen.drawImage(buffer, 0,0,this.getWidth(),this.getHeight(),null);
		}
	private void paintingVariants(GObject go, Graphics g){
		switch(go.getType()){
			case 1:
				this.drawRect(go, g);
				break;
			case 2:
				this.drawOval(go, g);
				break;
			case 3:
				this.drawLine(go, g);
				break;
		}
	}
	public void add(GObject go){
		mass.add(go);
		this.update();
	}
	private void drawRect(GObject go,Graphics g){
		g.setColor(go.getBoundsColor());
		g.drawRect(go.getX(),go.getY(),go.getWidth(),go.getHeight());
		if(go.isFilled()){
			g.setColor(go.getFillColor());
		g.fillRect(go.getX()+1,go.getY()+1,go.getWidth()-1,go.getHeight()-1);
		}
	}
	private void drawOval(GObject go,Graphics g){
		g.setColor(go.getBoundsColor());
		g.drawOval(go.getX(),go.getY(),go.getWidth(),go.getHeight());
		if(go.isFilled()){
			g.setColor(go.getFillColor());
		g.fillOval(go.getX()+1,go.getY()+1,go.getWidth()-1,go.getHeight()-1);
		}
	}
	private void drawLine(GObject go,Graphics g){
		g.setColor(go.getBoundsColor());
		g.drawLine(go.getX(),go.getY(),go.getWidth(),go.getHeight());
	}
	private void drawLabel(GObject go,Graphics g){
		
	}
	private void drawCompound(GObject go,Graphics g){
	}
	
	public void update(){
		this.paint(getGraphics());
	}
	private MOGO mass = new MOGO();
	private Image buffer = null;
	private boolean created = false;
	@Override
	public void catchFrameEvent(FrameEvent fe) {
		this.update();
	}
}
Neketek вне форума Ответить с цитированием
Старый 19.03.2013, 16:36   #2
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Цитата:
Самая главная проблема состоит в том , что я знаю только один способ запустить приложение для самостоятельной работы - это статический метод main, который не может работать с конкретным классом.
Что, чёрт возьми, совершенно логично: нестатический метод нельзя вызвать раньше, чем мы вызовем конструктор какого-то объекта - а конструктор нельзя вызвать раньше, чем мы начнём выполнение main. Порочный круг получается.

Никто не мешает Вам ограничить main созданием какого-то объекта и вызовом его метода run(). Собственно, так зачастую и делается.
Abstraction вне форума Ответить с цитированием
Старый 19.03.2013, 18:54   #3
Neketek
Пользователь
 
Регистрация: 22.03.2012
Сообщений: 26
По умолчанию

Вы правы, но проблема в том , что представляется невозможным при наследовании переопределять метод run(), точнее это возможно, но используя ваш метод получается, при переопределении я вызываю метод run() принадлежащий совершенно другому обьекту, который разместился под иным указателем чем обьект наследник.
Neketek вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Java, как избежать статического main Neketek Помощь студентам 1 19.03.2013 16:02
java не находит класс main в jar-файле (ANT) Zhigool' Общие вопросы по Java, Java SE, Kotlin 0 06.03.2013 13:34
Java. Не может найти main Class Fakov Помощь студентам 0 16.02.2013 16:50
Преобразование в строчный тип данных(Ошибка не содержит статического метода "Main", подходящего для точки входа) aly-lucenko Помощь студентам 8 02.10.2011 11:36
Exception in thread "main" java.lang.NullPointerException at Main.main(Main.java:9) elpilasgsm Помощь студентам 4 18.01.2011 08:23