Erro de Lógica

Bom dia/tarde/noite,

Estou com uma dúvida em um código que eu estava estudando e passando no eclipse, vamos lá:

  1. codigo correto (pelo menos é o que eu acho, e segundo o livro a arte do java tb esta correto):
String startUrl = startTextField.getText().trim();
	if(startUrl.length()<1) {
		errorList.add("Missing start URL");
	}
  1. Codigo aceito pelo eclipse, mas que não condiz com o livro:
String startUrl = startTextField.getText().trim(); {
	if(startUrl.length()<1) {
		errorList.add("Missing start URL");
	}
}
}

Mensagem de erro:
Syntax error on token “;”, { expected after this token SearchCrawler.java /WebCrawler/src/crawler line 352 Java Problem

Segue abaixo o código completo:

package crawler;

import java.awt.BorderLayout;
import java.awt.Checkbox;
import java.awt.Font;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.HashMap;
import java.lang.*;

import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JProgressBar;
import javax.swing.JScrollPane;
import javax.swing.JSeparator;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.table.DefaultTableModel;

public class SearchCrawler extends JFrame {
	
	//Valores máximos de URLs da lista drop-down
	
	private static final String[] MAX_URLS={"50","100","500","1000"};
	
	//cache de listas de não-autorização robot
	
	private HashMap disallowListCache = new HashMap();
	
	//controles GUI
	
	private JTextField startTextField;
	private JComboBox maxComboBox;
	private JCheckBox limitCheckBox;
	private JTextField logTextField;
	private JTextField searchTextField;
	private JCheckBox caseCheckBox;
	private JButton searchButton;
	
	//controles de gui de estatistica de pesquisa
	
	private JLabel crawlingLabel2;
	private JLabel crawledLabel2;
	private JLabel toCrawlLabel2;
	private JProgressBar progressBar;
	private JLabel matchesLabel2;
	
	//Tabela listando correspondencias de pesquisa
	
	private JTable table;
	
	//flag para se a varredura esta ou não esta em andamento
	
	private boolean crawling;
	
	//print writer do qrquivo de log de correspondencias
	
	private PrintWriter logFileWriter;
	
	//construtor para o search crawler
	
	public SearchCrawler() {
		
		//configura titulo
		
		setTitle("Search Crawler");
		
		//configura tamanho
		
		setSize(600,600);
		
		//trata eventos de fachamento de janela
		
		addWindowStateListener(new WindowAdapter() {
			public void windowClosing(WindowEvent e) {
				actionExit();
			}
		});
		
		//configura o menu file 
		
		JMenuBar menuBar=new JMenuBar();
		JMenu fileMenu = new JMenu("File");
		fileMenu.setMnemonic(KeyEvent.VK_F);
		JMenuItem fileExitMenuItem = new JMenuItem("Exit",KeyEvent.VK_X);
		fileExitMenuItem.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				actionExit();
				
			}
		});
		fileMenu.add(fileExitMenuItem);
		menuBar.add(fileMenu);
		
		//configura painel de pesquisa
		
		JPanel searchPanel = new JPanel();
		GridBagConstraints constraints;
		GridBagLayout layout = new GridBagLayout();
		searchPanel.setLayout(layout);
		
		JLabel startLabel = new JLabel("Start URL:");
		constraints = new GridBagConstraints();
		constraints.anchor = GridBagConstraints.EAST;
		constraints.insets = new Insets(5, 5, 0, 0);
		layout.setConstraints(startLabel, constraints);
		searchPanel.add(startLabel);
		
		startTextField = new JTextField();
		constraints = new GridBagConstraints();
		constraints.fill = GridBagConstraints.HORIZONTAL;
		constraints.gridwidth = GridBagConstraints.REMAINDER;
		constraints.insets = new Insets(5, 5, 0, 5);
		layout.setConstraints(startTextField, constraints);
		searchPanel.add(startTextField);
		
		JLabel maxLabel = new JLabel("Max URLs to crawl:");
		constraints = new GridBagConstraints();
		constraints.anchor = GridBagConstraints.EAST;
		constraints.insets = new Insets(5, 5, 0, 0);
		layout.setConstraints(maxLabel, constraints);
		searchPanel.add(maxLabel);
		
		maxComboBox = new JComboBox(MAX_URLS);
		maxComboBox.setEditable(true);
		constraints = new GridBagConstraints();
		constraints.insets = new Insets(5, 5, 0, 0);
		layout.setConstraints(maxComboBox, constraints);
		searchPanel.add(maxComboBox);
		
		limitCheckBox = new JCheckBox("Limit crawling to Start URL Site");
		constraints = new GridBagConstraints();
		constraints.anchor = GridBagConstraints.WEST;
		constraints.insets = new Insets(0, 10, 0, 0);
		layout.setConstraints(limitCheckBox, constraints);
		searchPanel.add(limitCheckBox);
		
		JLabel blankLabel = new JLabel();
		constraints = new GridBagConstraints();
		constraints.gridwidth = GridBagConstraints.REMAINDER;
		layout.setConstraints(blankLabel, constraints);
		searchPanel.add(blankLabel);
		
		JLabel logLabel = new JLabel("Matches Log File:");
		constraints = new GridBagConstraints();
		constraints.anchor = GridBagConstraints.EAST;
		constraints.insets = new Insets(5, 5, 0, 0);
		layout.setConstraints(logLabel, constraints);
		searchPanel.add(logLabel);
		
		String file = 
			System.getProperty("user.dir")+
			System.getProperty("file.separator")+
			"crawler.log";
		logTextField = new JTextField(file);
		constraints = new GridBagConstraints();
		constraints.fill = GridBagConstraints.HORIZONTAL;
		constraints.gridwidth = GridBagConstraints.REMAINDER;
		constraints.insets = new Insets(5, 5, 0, 5);
		layout.setConstraints(logTextField, constraints);
		searchPanel.add(logTextField);
		
		JLabel searchLabel = new JLabel("Search String:");
		constraints = new GridBagConstraints();
		constraints.anchor = GridBagConstraints.EAST;
		constraints.insets = new Insets(5, 5, 0, 0);
		layout.setConstraints(searchLabel, constraints);
		searchPanel.add(searchLabel);
		
		searchTextField = new JTextField();
		constraints = new GridBagConstraints();
		constraints.fill = GridBagConstraints.HORIZONTAL;
		constraints.insets = new Insets(5, 5, 0, 0);
		constraints.gridwidth = 2;
		constraints.weightx = 1.0d;
		layout.setConstraints(searchTextField, constraints);
		searchPanel.add(searchTextField);
		
		caseCheckBox = new JCheckBox("Case Sensitive");
		constraints = new GridBagConstraints();
		constraints.insets = new Insets(5, 5, 0, 5);
		constraints.gridwidth = GridBagConstraints.REMAINDER;
		layout.setConstraints(caseCheckBox, constraints);
		searchPanel.add(caseCheckBox);
		
		searchButton = new JButton("Search");
		searchButton.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				actionSearch();
				
			}
		});		
		constraints = new GridBagConstraints();
		constraints.gridwidth = GridBagConstraints.REMAINDER;
		constraints.insets = new Insets(5, 5, 5, 5);
		layout.setConstraints(searchButton, constraints);
		searchPanel.add(searchButton);
		
		JSeparator separator = new JSeparator();
		constraints = new GridBagConstraints();
		constraints.fill = GridBagConstraints.HORIZONTAL;
		constraints.gridwidth = GridBagConstraints.REMAINDER;
		constraints.insets = new Insets(5, 5, 5, 5);
		layout.setConstraints(separator, constraints);
		searchPanel.add(separator);
		
		JLabel crawlingLabel1 = new JLabel("Crawling:");
		constraints = new GridBagConstraints();
		constraints.anchor = GridBagConstraints.EAST;
		constraints.insets = new Insets(5, 5, 0, 0);
		layout.setConstraints(crawlingLabel1, constraints);
		searchPanel.add(crawlingLabel1);
		
		crawlingLabel2 = new JLabel();
		crawlingLabel2.setFont(getFont().deriveFont(Font.PLAIN));
		constraints = new GridBagConstraints();
		constraints.fill = GridBagConstraints.HORIZONTAL;
		constraints.gridwidth = GridBagConstraints.REMAINDER;
		constraints.insets = new Insets(5, 5, 0, 5);
		layout.setConstraints(crawlingLabel2, constraints);
		searchPanel.add(crawlingLabel2);
		
		JLabel crawledLabel1 = new JLabel("Crawled URLs:");
		constraints = new GridBagConstraints();
		constraints.anchor = GridBagConstraints.EAST;
		constraints.insets = new Insets(5, 5, 0, 0);
		layout.setConstraints(crawledLabel1, constraints);
		searchPanel.add(crawledLabel1);
		
		crawledLabel2 = new JLabel();
		crawledLabel2.setFont(getFont().deriveFont(Font.PLAIN));
		constraints = new GridBagConstraints();
		constraints.fill = GridBagConstraints.HORIZONTAL;
		constraints.gridwidth = GridBagConstraints.REMAINDER;
		constraints.insets = new Insets(5, 5, 0, 5);
		layout.setConstraints(crawledLabel2, constraints);
		searchPanel.add(crawledLabel2);
		
		JLabel toCrawlLabel1 = new JLabel();
		constraints = new GridBagConstraints();
		constraints.anchor = GridBagConstraints.EAST;
		constraints.insets = new Insets(5, 5, 0, 0);
		layout.setConstraints(toCrawlLabel1, constraints);
		searchPanel.add(toCrawlLabel1);
		
		toCrawlLabel2 = new JLabel();
		toCrawlLabel2.setFont(getFont().deriveFont(Font.PLAIN));
		constraints = new GridBagConstraints();
		constraints.fill = GridBagConstraints.HORIZONTAL;
		constraints.gridwidth = GridBagConstraints.REMAINDER;
		constraints.insets = new Insets(5, 5, 0, 5);
		layout.setConstraints(toCrawlLabel2, constraints);
		searchPanel.add(toCrawlLabel2);
		
		JLabel progressLabel = new JLabel("Crawling Progress:");
		constraints = new GridBagConstraints();
		constraints.anchor = GridBagConstraints.EAST;
		constraints.insets = new Insets(5, 5, 0, 0);
		layout.setConstraints(progressLabel, constraints);
		searchPanel.add(progressLabel);
		
		progressBar = new JProgressBar();
		progressBar.setMinimum(0);
		progressBar.setStringPainted(true);
		constraints = new GridBagConstraints();
		constraints.fill = GridBagConstraints.HORIZONTAL;
		constraints.gridwidth = GridBagConstraints.REMAINDER;
		constraints.insets = new Insets(5, 5, 0, 5);
		layout.setConstraints(progressBar, constraints);
		searchPanel.add(progressBar);
		
		JLabel matchesLabel1 = new JLabel("Search Matches");
		constraints = new GridBagConstraints();
		constraints.anchor = GridBagConstraints.EAST;
		constraints.insets = new Insets(5, 5, 10, 0);
		layout.setConstraints(matchesLabel1, constraints);
		searchPanel.add(matchesLabel1);
		
		matchesLabel2 = new JLabel();
		matchesLabel2.setFont(getFont().deriveFont(Font.PLAIN));
		constraints = new GridBagConstraints();
		constraints.fill = GridBagConstraints.HORIZONTAL;
		constraints.gridwidth = GridBagConstraints.REMAINDER;
		constraints.insets = new Insets(5, 5, 10, 5);
		layout.setConstraints(matchesLabel2, constraints);
		searchPanel.add(matchesLabel2);
		
		//configura a tabela de correspondencias
		
		table = new JTable(new DefaultTableModel(new Object[][]{}, new String[]{"URL"}){
			/**
			 * 
			 */
			private static final long serialVersionUID = 1L;

			public boolean isCellEditable(int row, int column) {
				return false;
			}
		});
		
		//configura o matches panel
		
		JPanel matchesPanel = new JPanel();
		matchesPanel.setBorder(BorderFactory.createTitledBorder("Matches"));
		matchesPanel.setLayout(new BorderLayout());
		matchesPanel.add(new JScrollPane(table),BorderLayout.CENTER);
		
		//adiciona paineis a tela
		
		getContentPane().setLayout(new BorderLayout());
		getContentPane().add(searchPanel,BorderLayout.NORTH);
		getContentPane().add(matchesPanel, BorderLayout.CENTER);
	}
	
	private void actionSearch() {
		if(crawling) {
			crawling = false;
			return;
		}
		
	}

	private void actionExit() {
		System.exit(0);
		
	}
	
	ArrayList<String> errorList = new ArrayList<String>();
	
	//verifica se a URL inicial foi inserida
	
	String startUrl = startTextField.getText().trim();
	if(startUrl.length()<1) {
		errorList.add("Missing start URL");
	}
}

Com certeza eu estou errado, pois o eclipse não iria dar uma mensagem dessas a toa, porém eu não consigo entender onde errei, se puderem me ajudar.

desde já agradeço pela atenção,

Yud.

O eclipse está reclamando pois o seu código não está dentro de um método. Como o código não é uma declaração de variável/atributo ele irá reclamar.

Verifique em qual método você queria que o código executasse e o mova para lá.

Creio que seja o mesmo que o Márcio disse. Coloca esse código dentro de um método.

[code]public void verificaString(){

String startUrl = startTextField.getText().trim();  
  
 if(startUrl.length()<1) {  
        errorList.add("Missing start URL");  
  }  

}[/code]

Depois chama o método onde desejar. Em um botão por exemplo.

Até mais.

Valeu galera deu certo!!!

Muito obrigado!

Pessoal,

As coisas que eu apronto!!!

Depois que vcs me passaram que o codigo deveria estar dentro de um método, da classe eu fui rever o código, e vi meu erro (grotesco diga-se de passagem) o código em questão deveria esta dentro do método actionSearch(), porem por um erro, eu coloquei o codigo fora e por isso estava dando erro, segue abaixo o codigo corrigido.

private void actionSearch() {
		if(crawling) {
			crawling = false;
			return;
		}
		ArrayList<String> errorList = new ArrayList<String>();
		
		//verifica se a URL inicial foi inserida
		
		String startUrl = startTextField.getText().trim();
		if(startUrl.length()<1) {
			errorList.add("Missing start URL");
		}
		else if (verifyUrl(startUrl)==null) {
			errorList.add("Invalid Start URL.");
		}
		int maxUrls = 0;
		String max = ((String)maxComboBox.getSelectedItem()).trim();
		if(max.length()>0) {
			try {
				maxUrls = Integer.parseInt(max);
			} catch (NumberFormatException e){}
			if(maxUrls<1) {
				errorList.add("Invalid Max URLs value.");
			}
		}
		
		//verifica se o arquivo de log de correspondencias foi inserido.
		
		String logFile = logTextField.getText().trim();
		if(logFile.length()<1) {
			errorList.add("Missing Matches Log File");
		}
	}