Java.Help

  • Автор теми AkeL.php
  • Дата створення

akl

geek
Код:
import java.awt.*;
import javax.swing.*;
import java.awt.Dimension;
import javax.swing.BorderFactory;

class GamePanel extends JComponent{
	Graphics g;
	int[][] FMATRIX = null;
	int COUNTW = 0; // number of squares along the width
	int COUNTH = 0; // number of squares along the height
	int SQSIZE = 0;
	int WIDTH = 0, HEIGHT = 0;
	private DebuggerTools dt;
	
	public GamePanel(int count_w, int count_h){
		this.setSize(400, 400);
		this.setMinimumSize(new Dimension(400, 300));
		this.setBorder(BorderFactory.createLineBorder(Color.GREEN));
		// Init debugger
		dt = new DebuggerTools();
		// Init variables
		COUNTW = count_w;
		COUNTH = count_h;
		// Init game matrix
		FMATRIX = new int[COUNTW][COUNTH];
		// Init size of the square
		Dimension  sz = getSize();
		WIDTH = sz.width; // panel size along  X coord
		HEIGHT = sz.height; // panel size along Y coord
		
	}
	~~~~~~~~~~~~ code ~~~~~~~~~~~~~~~~~
	
	public void fillSquare (int w, int h){
		FMATRIX[w][h] = 1;
		Graphics gf = getGraphics();
		System.out.println (gf);
		int coord_x = getSquareXY(w,h).width;
		int coord_y = getSquareXY(w,h).height;
		if (gf != null) {
			gf.setColor(Color.BLACK);
			gf.fillRect(coord_x, coord_y, SQSIZE, SQSIZE);
		} else {
			repaint();
		}
	}
	
	public void paintComponent(Graphics g){
		super.paintComponent(g);
		
		/* drawing the grid */
		// setting drawing color
		g.setColor(Color.GRAY);
		// drawing vertical lines
		for (int i = 0; i <= COUNTW*SQSIZE; i += SQSIZE){
			g.drawLine (i, 0 , i, COUNTH*SQSIZE);
		}
		// drawing horizontal lines
		for (int j = 0; j <= COUNTH*SQSIZE; j += SQSIZE){
			g.drawLine (0, j, COUNTW*SQSIZE, j);
		}
	}
}
При вызове функции fillSquare() System.out.println (gf) возвращает null. Собственно, что тут не так?
 

PainKiller

Пастафарианец
Команда форуму
Супер Модератор
Код:
import java.awt.*;
import javax.swing.*;
import java.awt.Dimension;
import javax.swing.BorderFactory;

class GamePanel extends JComponent{
	Graphics g;
	int[][] FMATRIX = null;
	int COUNTW = 0; // number of squares along the width
	int COUNTH = 0; // number of squares along the height
	int SQSIZE = 0;
	int WIDTH = 0, HEIGHT = 0;
	private DebuggerTools dt;
	
	public GamePanel(int count_w, int count_h){
		this.setSize(400, 400);
		this.setMinimumSize(new Dimension(400, 300));
		this.setBorder(BorderFactory.createLineBorder(Color.GREEN));
		// Init debugger
		dt = new DebuggerTools();
		// Init variables
		COUNTW = count_w;
		COUNTH = count_h;
		// Init game matrix
		FMATRIX = new int[COUNTW][COUNTH];
		// Init size of the square
		Dimension  sz = getSize();
		WIDTH = sz.width; // panel size along  X coord
		HEIGHT = sz.height; // panel size along Y coord
		
	}
	~~~~~~~~~~~~ code ~~~~~~~~~~~~~~~~~
	
	public void fillSquare (int w, int h){
		FMATRIX[w][h] = 1;
		Graphics gf = getGraphics();
		System.out.println (gf);
		int coord_x = getSquareXY(w,h).width;
		int coord_y = getSquareXY(w,h).height;
		if (gf != null) {
			gf.setColor(Color.BLACK);
			gf.fillRect(coord_x, coord_y, SQSIZE, SQSIZE);
		} else {
			repaint();
		}
	}
	
	public void paintComponent(Graphics g){
		super.paintComponent(g);
		
		/* drawing the grid */
		// setting drawing color
		g.setColor(Color.GRAY);
		// drawing vertical lines
		for (int i = 0; i <= COUNTW*SQSIZE; i += SQSIZE){
			g.drawLine (i, 0 , i, COUNTH*SQSIZE);
		}
		// drawing horizontal lines
		for (int j = 0; j <= COUNTH*SQSIZE; j += SQSIZE){
			g.drawLine (0, j, COUNTW*SQSIZE, j);
		}
	}
}
При вызове функции fillSquare() System.out.println (gf) возвращает null. Собственно, что тут не так?
А де ты w и h берешь?
Я не вижу нигде их определения.
 

akl

geek
public void fillSquare (int w, int h)
для примера fillSquare (1, 2)
 

akl

geek
Спасибо, смотрел. Пока мало чего полезного нашёл.
P.S. код мой.
 

GrAndSE

Тёмный
Модератор
Спасибо, смотрел. Пока мало чего полезного нашёл.
P.S. код мой.
Первая ссылка в гугле по запросу getGraphics java:
getGraphics

public Graphics getGraphics()

Creates a graphics context for this component. This method will return null if this component is currently not displayable.

Returns:
a graphics context for this component, or null if it has none
Осмелюсь придположить, что компонент сей просто нигде не отображается. К сожалению приведенный выше код ничего подсказать по этому поводу не может.
 

dreamer

Member
Не буду создавать новую тему, воспользуюсь старой.
Благо подписчиков тут много :)

Итак есть простая программа на Java:
Код:
import java.util.regex.*;
import java.io.*;

class Test {
    public static void main(String[] args) throws IOException {
        BufferedReader reader = new BufferedReader(new FileReader("testfile"));
        Pattern pattern = Pattern.compile("BuGaGa", Pattern.CASE_INSENSITIVE);
        String line;
        while ((line = reader.readLine()) != null) {
            Matcher matcher = pattern.matcher(line);
            if (matcher.find())
                System.out.print("Bugaga found!");
        }
    }
}
Тестировался на большом файле (~800Mb, ~7K строк), работал почти 42 секунды, в то время как перл и пхп отработали за 13-17 секунд.

Меня интересует вот что - можно ли как-то оптимизировать этот код на Java или она для такого вообще непригодна?
 

dreamer

Member
Залей файлик на Share.club. Посмотрим...
Спасибо, но файлик абсолютно произвольный, собственно это многократно дублированный лог убунты :)
Тут вопрос в том как оптимизировать код в общем случае, может я не учел каких-то тонкостей, возможно ли как-то обойтись без создания объектов в цикле и т.д.

Это не практическая задача.
 
Зверху