Oi tituga,
Provavelmente é por causa desta linha:
package xml;
Tente adapta-la ao seu projeto para ver se funciona. Se o erro continuar post os detalhes do erro.
[]'s
Oi tituga,
Provavelmente é por causa desta linha:
package xml;
Tente adapta-la ao seu projeto para ver se funciona. Se o erro continuar post os detalhes do erro.
[]'s
Oi
Nao essa linha ta bem.
o erro é este:
Tabela cannot be resolved to a type.
Nao sei o porque deste erro.POde ajudar?
Entretanto tentei com o seu outro codigo, mudei algumas coisas e ficou assim:
package pt.ConvBD;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
public class xml {
public static Document readXmlDocument(String fileName) {
Document document = null;
try {
SAXReader reader = new SAXReader();
document = reader.read(fileName);
} catch (DocumentException e) {
e.printStackTrace();
}
return document;
}
@SuppressWarnings("unchecked")
public static void printXmlDocument(Document document) {
Element root = document.getRootElement();
// Obtém a lista de tabelas
List<Element> rootElements = root.elements();
for (Element tabela : rootElements) {
StringBuilder sbRoot = new StringBuilder(0);
sbRoot.append("TABELA DESTINO -> ");
sbRoot.append(tabela.attributeValue("destino"));
sbRoot.append(" TABELA ORIGEM -> ");
sbRoot.append(tabela.attributeValue("origem"));
print(sbRoot.toString());
// Obtém a lista de colunas da tabela
List<Element> colunas = tabela.elements();
for (Element coluna : colunas) {
StringBuilder sbCol = new StringBuilder(0);
sbCol.append(" COLUNA DESTINO -> "+coluna.attributeValue("destino"));
sbCol.append(" COLUNA ORIGEM -> "+coluna.attributeValue("origem"));
print(sbCol.toString());
}
print("----------------------------------------------------------------");
}
}
public static void print(String sb) {
System.out.println(sb.toString());
}
}
O k voce tinha no main eu coloquei na minha shell, aquando faço a ligação.
so k ao correr dao estes erros:
org.dom4j.DocumentException: unknown protocol: c Nested exception: unknown protocol: c
at org.dom4j.io.SAXReader.read(SAXReader.java:484)
at org.dom4j.io.SAXReader.read(SAXReader.java:321)
at pt.ConvBD.xml.readXmlDocument(xml.java:19)
at pt.Interface.Janela$12.widgetSelected(Janela.java:506)
at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:227)
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:66)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:938)
at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3682)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3293)
at pt.Interface.Janela.main(Janela.java:161)
Nested exception:
java.net.MalformedURLException: unknown protocol: c
at java.net.URL.(Unknown Source)
at java.net.URL.(Unknown Source)
at java.net.URL.(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.setupCurrentEntity(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLVersionDetector.determineDocVersion(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source)
at org.dom4j.io.SAXReader.read(SAXReader.java:465)
at org.dom4j.io.SAXReader.read(SAXReader.java:321)
at pt.ConvBD.xml.readXmlDocument(xml.java:19)
at pt.Interface.Janela$12.widgetSelected(Janela.java:506)
at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:227)
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:66)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:938)
at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3682)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3293)
at pt.Interface.Janela.main(Janela.java:161)
Nested exception: java.net.MalformedURLException: unknown protocol: c
at java.net.URL.(Unknown Source)
at java.net.URL.(Unknown Source)
at java.net.URL.(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.setupCurrentEntity(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLVersionDetector.determineDocVersion(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source)
at org.dom4j.io.SAXReader.read(SAXReader.java:465)
at org.dom4j.io.SAXReader.read(SAXReader.java:321)
at pt.ConvBD.xml.readXmlDocument(xml.java:19)
at pt.Interface.Janela$12.widgetSelected(Janela.java:506)
at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:227)
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:66)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:938)
at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3682)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3293)
at pt.Interface.Janela.main(Janela.java:161)
java.lang.NullPointerException
at pt.ConvBD.xml.printXmlDocument(xml.java:31)
at pt.Interface.Janela$12.widgetSelected(Janela.java:507)
at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:227)
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:66)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:938)
at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3682)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3293)
at pt.Interface.Janela.main(Janela.java:161)
sabe o pk disto??
Mt obrigada fantomas tem sido de grand ajuda.
bj
Oi tituga,
O primeiro problema que você citou pode ser porque vc não tenha importado a classe Tabela no código onde ela está sendo utilizada. Verifique se na classe onde está ocorrendo o erro existe uma linha assim:
import pacoteA.pacoteB.pacoteC.Tabela;
Onde pacoteA.pacoteB.pacoteC indica o pacote (package) ou os pacotes onde você colocou a classe Tabela.
Acho que eclipse se vc teclar Ctrl+Shift+O na classe que estiver com o erro ele faz a importação automática para você
O outro problema com a classe XML pode ser que você tenha colocado algum caracter estranho na url onde está localizado o arquivo, para simular o erro eu coloquei um espaço na url.
Document doc = Xml.readXmlDocument("c:// portugal//atualizacoes.xml"); // <-- TEM UM ESPAÇO ANTES DA PALAVRA PORTUGAL
[]'s
OI fantomas.
foi erro meu. realmente faltava o import.
mas agora qd tento por a correr da-m o seguint erro :
java.lang.NoClassDefFoundError: org/jpox/enhancer/JPOXEnhancer
nao sei o k é?
Quanto ao outro problema ja ta resolvido tambem, tinhas espaços, resolvi por no c: e assim ficou resolvido.
obrigada voce tem sido d grande ajuda
oi
ja adicionei no meu programa.
ele le e imprime o xml mas nao consigo executar as funçoes sql.
da-me o erro:
java.sql.SQLException: Can not issue NULL query.
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1056)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:957)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:927)
at com.mysql.jdbc.StatementImpl.checkNullOrEmptyQuery(StatementImpl.java:431)
at com.mysql.jdbc.StatementImpl.executeQuery(StatementImpl.java:1257)
at pt.ConvBD.Tituga.executar(Tituga.java:117)
at pt.ConvBD.Tituga.processar(Tituga.java:63)
at pt.Interface.Janela$12.widgetSelected(Janela.java:510)
at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:227)
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:66)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:938)
at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3682)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3293)
at pt.Interface.Janela.main(Janela.java:162)
ja ta quase…
Oi tituga,
Acho que o problema é o seguinte:
Este método deve estar voltando um valor nulo.
String sql = destino.obterSelectByPrimaryKey(valores);
Se isso for verdade você terá que fazer uma verificação no código desta linha:
valores = this.obterValores(rs, origem.getColunasChave());
Se o método obterValores() voltar uma lista de valores vazia certamente ocorrerá este erro. Se isto se confirmar verifique se o método getColunasChave() está voltando o nome da coluna corretamente.
Lembre que no arquivo xml você terá que colocar a propriedade primary-key="true" deste jeito:
<coluna destino="customers_id" origem="no" primary-key="true" type="long" />
O método getColunasChave() tem que retornar a coluna descrita nesta tag, que é a "cutomers_id" utilizada neste exemplo.
Obs. O nome das colunas no xml não podem conter erros, ou seja, tem que estar exatamente igual ao nome da coluna que está na tabela da base de dados.
Bem...acho que o problema é este.
System.out.println(“Abraços”);
OI.
Desculpa la…
cm faço a verificação? :oops:
ja tentei o debug com um brakpoint na linha mas nao consegui…
bj
Oi tituga,
Dê uma lida nas páginas destes links:
http://hotwork.sourceforge.net/hotwork/manual/eclipse/eclipse-user-guide.html#Rodando_em_modo_Debug
http://www.filesystems.org/~dquigley/cse219/index.php?it=eclipse&tt=debug&pf=y
http://hotwork.sourceforge.net/hotwork/manual/eclipse/eclipse-user-guide.html
[]'s
oi.
ainda nao consegui fazer o debug, da-m uns erros
mas consegui descobrir k o outro erro se devia a estar a fazer a ligação duas vezes à base de dados, provavelment (pois apaguei e deu !!! lol)
mas agora acontece k nao faz nem os inserts nem updates.
o k tens nesta linha como arquivo :
Document doc = this.obterXmlDocument(arquivo);
serve para que?
e ja agora nao colocas-t a mostrar os dados k vai passar pois nao?
desculpa tanta pergunta, mas é k tou mesmo atrapalhada nisto, e como ja deu pra perceber nao sou mt sabedora de java :roll:
bj obrigada
oi.
finalmente consegui descobrir…fiz um print dos valores e realmente esta vazio, porque sera?
so falta mesmo ultrapassar este obstaculo…
bj
Amigo problema resolvido…
Ja faz a passagem dos dados…
Agora preciso colocar a passar a pass encriptada, ou seja tem k passar por uma função minha e so depois é mandada para a outra base de dados…
se tiveres alguma ideia diz.
bjs e mt obrigada
Oi tituga,
[quote]Document doc = this.obterXmlDocument(arquivo);
serve para que? [/quote]
O método this.obterXmlDocument(arquivo) retorna o conteúdo do arquivo xml em uma estrutura navegável do tipo Document, o parametro passado é a localização do arquivo.
Eu ainda não utilizei criptografia mas dê uma olhada neste link http://www.devmedia.com.br/articles/viewcomp.asp?comp=2944 acho que vai te ajudar.
Deculpe a demora em responder.
[]'s
eu ja tenho minha função criptografia a funcionar, ou melhor funciona mas nao com o xml.
minha duvida esta como a vou usar no xml???
Aqui esta como eu chamo a função criptografia:
Criptografia.criptografar(senha)
onde senha é o valor a encriptar.
nao sei como colocar isso no xml.
bjs
Oi tituga,
Segue abaixo uma sugestão, as alterações estão apontadas com uma seta.
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
public class Tabela {
private String nome = null;
private List<String> colunas = new ArrayList<String>(0);
private List<String> colunasChave = new ArrayList<String>(0);
private List<String> colunasCriptografar = new ArrayList<String>(0); // <---------------
public Tabela(String nome, List<String> colunas, List<String> colunasChave, List<String> colunasCriptografar) { // <<----
this.nome = nome;
this.colunas = colunas;
this.colunasChave = colunasChave;
this.colunasCriptografar = colunasCriptografar;
}
public Tabela(String nome, List<String> colunas, List<String> colunasChave) {
this.nome = nome;
this.colunas = colunas;
this.colunasChave = colunasChave;
}
public List<String> getColunas() {
return this.colunas;
}
public List<String> getColunasChave() {
return this.colunasChave;
}
public List<String> getColunasCriptografar() {
return this.colunasCriptografar;
}
public String obterSelect() {
StringBuilder sb = new StringBuilder(0);
sb.append("SELECT ");
sb.append(this.concatenar(this.colunas));
sb.append(" FROM ");
sb.append(this.nome);
return sb.toString();
}
public String obterSelectByPrimaryKey(List<String> valores) {
String result = null;
if (valores != null && valores.size() == this.colunasChave.size()) {
StringBuilder sb = new StringBuilder(0);
sb.append(this.obterSelect());
sb.append(" WHERE ");
for (int i = 0; i < this.colunasChave.size(); i++) {
sb.append(" ");
sb.append(colunasChave.get(i));
sb.append("=");
sb.append(valores.get(i));
sb.append(" AND");
}
result = sb.toString();
result = result.substring(0, result.length() - 3);
}
return result;
}
public String obterUpdate(List<String> valores) {
String result = null;
if (valores != null && valores.size() == this.colunas.size()) {
StringBuilder sb = new StringBuilder(0);
sb.append("UPDATE ");
sb.append(this.nome);
sb.append(" SET ");
for (int i = 0; i < this.colunas.size(); i++) {
sb.append(colunas.get(i));
sb.append(" = ");
sb.append(valores.get(i));
sb.append(",");
}
result = retirarUltimoCaracter(sb.toString());
}
return result;
}
public String obterInsert(List<String> valores) {
StringBuilder sb = new StringBuilder(0);
sb.append("INSERT INTO ");
sb.append(this.nome);
sb.append(" ( ");
sb.append(this.concatenar(this.colunas));
sb.append(" ) ");
sb.append("VALUES ( ");
for (String valor : valores) {
sb.append(valor+"'");
}
return( retirarUltimoCaracter(sb.toString())+" )");
}
private String concatenar(List<String> colunas) {
StringBuilder sb = new StringBuilder(0);
for (String coluna : colunas) {
sb.append(coluna+",");
}
return retirarUltimoCaracter(sb.toString());
}
public static String doubleToString(Double v) {
String valor = ( v != null ? String.valueOf(v) : "null" );
return valor;
}
public static String longToString(Long v) {
String valor = ( v != null ? String.valueOf(v) : "null" );
return valor;
}
public static String stringToString(String v) {
String valor = ( v != null ? "'" + v + "'" : "null" );
return valor;
}
public static String dateToString(Date v) {
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
String valor = ( v != null ? "'" + sdf.format(v) + "'" : "null" );
return valor;
}
private String retirarUltimoCaracter(String param) {
return (param.substring(0, param.length() - 1));
}
}
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
public class Tituga {
private Connection cnn = null;
@SuppressWarnings("unchecked")
public void processar(String arquivo) {
this.conectar();
if (this.cnn != null) {
Document doc = this.obterXmlDocument(arquivo);
Element root = doc.getRootElement();
// Obtém a lista de tabelas
List<Element> rootElements = root.elements();
for (Element tabela : rootElements) {
String origem = tabela.attributeValue("origem");
String destino = tabela.attributeValue("destino");
List<String> colunasOrigem = new ArrayList<String>(0);
List<String> colunasDestino = new ArrayList<String>(0);
List<String> colunasChaveOrigem = new ArrayList<String>(0);
List<String> colunasChaveDestino = new ArrayList<String>(0);
List<String> colunasCriptografar = new ArrayList<String>(0); // <<---------------
// Obtém a lista de colunas da tabela
List<Element> colunas = tabela.elements();
for (Element coluna : colunas) {
colunasOrigem.add(coluna.attributeValue("origem"));
colunasDestino.add(coluna.attributeValue("destino"));
if (coluna.attributeValue("primary-key") != null) {
colunasChaveOrigem.add(coluna.attributeValue("origem"));
colunasChaveDestino.add(coluna.attributeValue("destino"));
}
if (coluna.attributeValue("criptografar") != null) { // <<------------------
colunasCriptografar.add(coluna.attributeValue("origem")); // <<------------------
} // <<------------------
}
// Construir os objetos para a tabela origem e destino
Tabela tabelaOrigem = new Tabela(origem, colunasOrigem, colunasChaveOrigem, colunasCriptografar); // <<------------
Tabela tabelaDestino = new Tabela(destino, colunasDestino, colunasChaveDestino);
// Processa a atualização das tabelas origem e destino
this.executar(tabelaOrigem, tabelaDestino);
}
this.desconectar();
}
}
private List<String> obterValores(ResultSet rs, List<String> colunas) {
List<String> valores = new ArrayList<String>(0);
try {
ResultSetMetaData rsmd = rs.getMetaData();
for (String coluna : colunas) {
int i = rs.findColumn(coluna);
String t = rsmd.getColumnTypeName(i);
if (t.equals("VARCHAR")) {
valores.add(Tabela.stringToString(rs.getString(i)));
} else if (t.equals("NUMERIC") || t.equals("LONG")) {
valores.add(Tabela.longToString(rs.getLong(i)));
} else if (t.equals("DOUBLE")) {
valores.add(Tabela.doubleToString(rs.getDouble(i)));
} else if (t.equals("DATE")) {
valores.add(Tabela.dateToString(rs.getDate(i)));
} else if (t.equals("BLOB")) {
valores.add("null");
}
}
} catch (SQLException e) {
e.printStackTrace();
}
return valores;
}
private void executar(Tabela origem, Tabela destino) {
String query = origem.obterSelect();
try {
List<String> valores = null;
Statement stOrigem = cnn.createStatement();
Statement stDestino = cnn.createStatement();
ResultSet rs = stOrigem.executeQuery(query);
while (rs.next()) {
valores = this.obterValores(rs, origem.getColunasChave());
String sql = destino.obterSelectByPrimaryKey(valores);
ResultSet rsKey = stDestino.executeQuery(sql);
valores = this.obterValores(rs, origem.getColunas());
valores = CriptografiaUtil.criptografar(origem, valores); // <--------------------
// Verificar se a chave já está no destino
if (rsKey.next()) {
// Se estiver altera os dados
sql = destino.obterUpdate(valores);
} else {
// Se NÂO estiver insere os dados
sql = destino.obterInsert(valores);
}
stDestino.execute(sql);
}
cnn.commit();
rs.close();
} catch (Exception e) {
e.printStackTrace();
}
}
private void conectar() {
try {
cnn = DriverManager.getConnection("jdbc:derby:C:\\portugal\\tituga", "admin", "admin");
} catch (SQLException e) {
e.printStackTrace();
}
}
private void desconectar() {
if (this.cnn != null) {
try {
this.cnn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
private Document obterXmlDocument(String fileName) {
Document document = null;
try {
SAXReader reader = new SAXReader();
document = reader.read(fileName);
} catch (DocumentException e) {
e.printStackTrace();
}
return document;
}
public static void print(String sb) {
System.out.println(sb.toString());
}
public static void main(String[] args) {
Tituga tituga = new Tituga();
tituga.processar("c://portugal//atualizacoes.xml");
}
}
Esta classe é nova.
import java.util.ArrayList;
import java.util.List;
public class CriptografiaUtil {
public static List<String> criptografar(Tabela tabela, List<String> valores ) {
List<String> valoresCriptografados = new ArrayList<String>(0);
List<String> colunas = tabela.getColunas();
List<String> colunasCriptografar = tabela.getColunasCriptografar();
for(int i = 0; i < colunas.size(); i++) {
String coluna = colunas.get(i);
String valor = valores.get(i);
if(colunasCriptografar.contains(coluna)) {
String valorCriptografado = Criptografia.criptografar(valor); // <<---------------- CRIPTOGRAFAR
valor = "'"+valorCriptografado+"'";
}
valoresCriptografados.add(valor);
}
return valoresCriptografados;
}
}
Antes de alterar o seu projeto faça um backup antes, espero ter ajudado
[]'s
Esqueci de enviar o novo xml, foi adicionado o atributo criptografar=“true”
<?xml version="1.0" encoding="UTF-8"?>
<base-dados>
<tabela destino="customers" origem="cl">
<coluna destino="customers_id" origem="id" primary-key="true" />
<coluna destino="customers_firstname" origem="nome" />
<coluna destino="customers_fax" origem="fax" />
<coluna destino="customers_telephone" origem="telefone" />
<coluna destino="customers_dob" origem="nascimento" />
<coluna destino="customers_email_adress" origem="email" />
<coluna destino="customers_password" origem="pass" criptografar="true" />
</tabela>
<tabela destino="produtcs" origem="st">
<coluna destino="produtcs_id" origem="ststamp" primary-key="true" />
<coluna destino="produtcs_model" origem="familia" />
<coluna destino="produtcs_quantity" origem="stock" />
<coluna destino="produtcs_price" origem="pv1" />
<coluna destino="manufacturers_id" origem="fornec" />
<coluna destino="produtcs_weigth" origem="peso" />
<coluna destino="produtcs_image" origem="imagem" />
</tabela>
<tabela destino="produtcs_description" origem="st">
<coluna destino="produtcs_id" origem="ststamp" primary-key="true" />
<coluna destino="produtcs_description" origem="design" />
<coluna destino="language_id" origem="lang1" />
<coluna destino="produtcs_url" origem="url" />
</tabela>
</base-dados>
[]'s
É isso amigo.
agora tenho apenas um problema k tou a tentar resolver.
No update ele nao da erro mas, como tenho varias linhas nao esta a fazer o update no sitio certo, falta o where, teria de ficar qualquer coisa como:
UPDATE customers SET customers_firstname = ‘Paulo’,customers_fax = 252718923,customers_telephone = 912345678,customers_dob = ‘1985-02-10’,customers_email_address = ‘tony_dotcom@hotmail.com’,customers_password = ‘b5ef261a75dce04c2b86ad4a0d3ea510’ WHERE customers_id=‘id’
mas nao sei como.
ja tentei alterar no codigo mas nao consigo tirar a virgula antes do where…
obrigada por tudo
Oi tituga,
Na classe Tabela.java tem um método que faz isso.
private String retirarUltimoCaracter(String param) {
return (param.substring(0, param.length() - 1));
}
[]'s
oi.
Ja resolvi o problema.
Acrescentei o WHERE e coloquei um if, no caso se ser o this.colunasChave.size()-1 nao coloca virgula, assim insere os dados direitinhos
Obrigada pela sua ajuda fantimas, ficou tudo a funcionar direitinho
bj
oi amigo
tou com um novo problema…
queria gerar o .jar para puder colocar o programa a funcionar noutro computador, mas nao da.
Fiz o export mas ao tentar correr da-m um erro:
could not find the main class : ptInterface.Janela2.Program will exit.
a minha main é uma windows application…
podes-m ajudar?