Bom galera... é o seguinte:
Tenho uma aplicação que funciona com apenas 2 classes. Sendo que a MANAGER é a principal.
O funcionamento ocorre normalmente, porém estou tentando encapsular em um JAR EXECUTAVEL.
Ao adicionar no JAR não consigo fazê-lo funcionar... Ao realizar o duplo-clique simplismente não acontece nada e quando tento via linha de comando retorna a seguinte mensagem:
[color=red]G:\JAVA\Project>java -jar Manager.jar
Failed to load Main-Class manifest attribute from
Manager.jar[/color]
Os arquivos estão em uma pasta chamada Final... no jar eu devo colocar "Final.classe" ou apenas "classe"
Seguem os códigos utilizados sendo que o primeiro é o conteúdo do JAR, e os itens ICON.JPG e TEXT.TXT são internos ao JAR.
Manifest-Version: 1.0
Created-By: Thiago Campos, Equipe TI
Main-Class: Manager
public class Manager
{
public static void main(String args[]) throws Exception
{
//Configura o programa para rodar em modo "tray"
final SystemTray tray = SystemTray.getSystemTray();
//Busca a imagem a ser utilizada no icone
Image image = Toolkit.getDefaultToolkit().getImage("icon.jpg");
//Cria um PopupMenu para armazenar os itens dentro do menu do TrayIcon
PopupMenu popup = new PopupMenu();
//Cria os itens do menu
MenuItem itemAbout = new MenuItem("Autor");
//Seta o TrayIcon com 3 parametros:
// - Icone;
// - String que aparece com o passar do mouse;
// - Itens do popup.
final TrayIcon trayIcon = new TrayIcon(image, "Manager", popup);
trayIcon.setImageAutoSize(true);
//Configuração do Bloqueio
final LockScreen block = new LockScreen();
block.setHoraBlock();
//Listener para exibir msg com dois clicks do mouse, menu ira aparecer com botao direito
ActionListener clickListener = new ActionListener()
{
public void actionPerformed(ActionEvent cl)
{
//If apenas para evitar erros
if (SystemTray.isSupported() == true)
{
//Seta a imagem automaticamente
trayIcon.setImageAutoSize(true);
//Mostra a mensagem com 3 argumentos: Titulo, texto e icone info,
trayIcon.displayMessage("Manager: ",
"Versão 1.0", TrayIcon.MessageType.INFO);
return;
}
}
};
//Listener de configuração do item autor
ActionListener autorListener = new ActionListener()
{
public void actionPerformed(ActionEvent au)
{
//Seta a imagem automaticamente
trayIcon.setImageAutoSize(true);
//Mostra a mensagem com 3 argumentos: Titulo, texto (2 linhas) e icone info,
trayIcon.displayMessage("Autor",
"Thiago Campos\nTI", TrayIcon.MessageType.INFO);
}
};
//Listener para remover o ícone e fechar o sistema:
ActionListener actionListener = new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
if (SystemTray.isSupported() == false)
{
trayIcon.setImageAutoSize(true);
//Remove o trayIcon
tray.remove(trayIcon);
return;
}
}
};
//Adicionando os Listeners nos itens de menu criados anteriormente
itemAbout.addActionListener(autorListener);
//Adiciona os Listeners que executam ações no trayIcon
trayIcon.addActionListener(actionListener);
trayIcon.addActionListener(clickListener);
// trayIcon.addActionListener(blockListener);
//Adiciona os itens no menu PopUp
popup.add(itemAbout);
//Realiza o try exception
try
{
tray.add(trayIcon);
} catch (AWTException ex)
{
JOptionPane.showMessageDialog(null, ex);
}
//realizando o bloqueio
int progress = 0;
while(progress != 1)
{
block.Lock();
if (block.msgAviso())
{
trayIcon.setImageAutoSize(true);
trayIcon.displayMessage("Aviso: ",
"Seu computador será bloqueado em poucos minutos.\nSalve seus trabalhos",
TrayIcon.MessageType.INFO);
}
}
}
}
import java.io.*;
import java.util.*;
public class LockScreen
{
String[] ids;
SimpleTimeZone pdt;
Calendar calendar;
Date trialTime;
int hora;
File arquivo;
FileReader leitor;
BufferedReader buf;
String linha, texto;
public void setHoraBlock() throws IOException
{
//Informa o programa qual arquivo será utilizado
arquivo = new File("text.txt");
//Configura o leitor do arquivo
leitor = new FileReader(arquivo);
//Armazena a leitura no buffer para a utilização
buf = new BufferedReader(leitor);
linha = "";
texto = "";
//Enquanto a linha lida não for nula (vazia)
while(linha!=null)
{
//adiciona a linha lida
texto = texto + linha;
//Armazena na variavel a informação lida da linha do arquivo
linha=buf.readLine();
}
//Seta a variavel global com a hora
hora = Integer.parseInt(texto);
}
public int getHoraBlock()
{
return hora;
}
public boolean msgAviso()
{
if ((calendar.get(Calendar.HOUR_OF_DAY) == getHoraBlock() - 1) && (calendar.get(Calendar.MINUTE) >= 45))
{
return true;
}
return false;
}
public void Lock()
{
//Forma o suporte para o fuso horario brasileiro (GMT: -3:00)
ids = TimeZone.getAvailableIDs(-3 * 60 * 60 * 1000);
//Verifica se Indice De Seguranca foi preenchido corretamente pelo sistema,
//caso contrario ira sair do programa
if (ids.length == 0)
System.exit(0);
//Inicia o controle da hora e seta o GMT pra nao ter falhas de configuracoes do Windows
pdt = new SimpleTimeZone(-3 * 60 * 60 * 1000, ids[0]);
//Inicia o calendario com base nas informacoes setadas acima
calendar = new GregorianCalendar(pdt);
//Cria um objeto DATE para utilizar a hora corrente no sistema operacional
trialTime = new Date();
calendar.setTime(trialTime);
//Caso a hora do sistema seja igual a hora informada pelo usuario
if ((calendar.get(Calendar.HOUR_OF_DAY) == (getHoraBlock() - 1)) && (calendar.get(Calendar.MINUTE) == 50))
{
try
{
String ls_str;
//Bloqueia a tela
Process ls_proc = Runtime.getRuntime().exec("rundll32 user32,LockWorkStation");
//Faz com que o Java reconheca o comando do Windows
BufferedReader ls_in = new BufferedReader(new InputStreamReader
(ls_proc.getInputStream()));
try
{
while ((ls_str = ls_in.readLine()) != null)
{
System.out.println(ls_str);
}
} catch (IOException e)
{
System.exit(0);
}
} catch (IOException e1)
{
System.err.println(e1);
System.exit(1);
}
}
//System.exit(0);
}
}
Agradeço atencipadamente a atenção de todos!