Computing.Net > Forums > Programming > Create Java Executable .jar file?

Create Java Executable .jar file?

Reply to Message Icon

Original Message
Name: SNYP40A1
Date: November 26, 2004 at 23:30:44 Pacific
Subject: Create Java Executable .jar file?
OS: Windows XP
CPU/Ram: P4/2.4 Ghz
Comment:

Hello,
This probably sounds like something that I could just simply look up on the internet, but not quite. I have put in 4 hours already trying to find my answer of how to create an executable .jar file, but I have had no luck so far. My code is posted below, it compiles in Blue J by calling the method void main(String []args)... , but I would like to put it in an executable file such that it runs after one click. Does anyone know how to do this? Actually, you can see my code more easily at http://snyp40a1.tripod.com

Thanks for your help!
-HM

import java.io.* ;

import java.net.* ;

import java.util.* ;

public final class WebServer

{

public static void main(String argv[]) throws Exception

{

// Set the port number.

int port = 6789;

// Establish the listen socket.

ServerSocket listenSocket = new ServerSocket(port);

// Process HTTP service requests in an infinite loop.

while (true) {

// Listen for a TCP connection request.

Socket connectionSocket = listenSocket.accept();

// Construct an object to process the HTTP request message.

HttpRequest request = new HttpRequest(connectionSocket);

// Create a new thread to process the request.

Thread thread = new Thread(request);

// Start the thread.

thread.start();

}

}

}

final class HttpRequest implements Runnable

{

final static String CRLF = "\r\n";

Socket socket;

// Constructor

public HttpRequest(Socket socket) throws Exception

{

this.socket = socket;

}

// Implement the run() method of the Runnable interface.

public void run()

{

try {

processRequest();

} catch (Exception fault) {

System.out.println(fault);

}

}

//Specify the proper content type for content-type header.

private String contentType(String fileName)

{

if(fileName.endsWith(".htm") || fileName.endsWith(".html"))

{

return "text/html";

}

if(fileName.endsWith(".jpg"))

{

return "image/jpeg";

}

if(fileName.endsWith(".gif"))

{

return "image/gif";

}

if(fileName.endsWith(".doc"))

{

return "application/msword";

}

else return "application/octet-stream";

}

private static void sendBytes(FileInputStream fis, OutputStream os)

throws Exception

{

// Construct a 1K buffer to hold bytes on their way to the socket.

byte[] buffer = new byte[1024];

int bytes = 0;

// Copy requested file into the socket's output stream.

while((bytes = fis.read(buffer)) != -1 )

{

os.write(buffer, 0, bytes);

}

}

private void processRequest() throws Exception

{

// Get a reference to the socket's input and output streams.

InputStream is = this.socket.getInputStream();

DataOutputStream os = new DataOutputStream(this.socket.getOutputStream());

// Set up input stream filters.

InputStreamReader is2 = new InputStreamReader(is);

BufferedReader br = new BufferedReader(is2);

// Get the request line of the HTTP request message.

String requestLine = br.readLine();

// Display the request line.

System.out.println();

System.out.println(requestLine);

// Get and display the header lines.

String headerLine = null;

while ((headerLine = br.readLine()).length() != 0)

{

System.out.println(headerLine);

}

// Extract the filename from the request line.

StringTokenizer tokens = new StringTokenizer(requestLine);

tokens.nextToken(); // skip over the method, which should be "GET"

String fileName = tokens.nextToken();

// Prepend a "." so that file request is within the current directory.

fileName = "." + fileName;

// Open the requested file.

FileInputStream fis = null;

boolean fileExists = true;

try {

fis = new FileInputStream(fileName);

} catch (FileNotFoundException e) {

fileExists = false;

}

// Construct the response message.

String statusLine = null;

String contentTypeLine = null;

String entityBody = null;

//If file exists, send the OK message along with content-type.

//Otherwise send the 404 File Not found error message.

if (fileExists) {

statusLine = "HTTP/1.0 200 OK" + CRLF;

contentTypeLine = "Content-type: " +

contentType( fileName ) + CRLF;

} else {

statusLine = "HTTP/1.0 404 Not Found" + CRLF;

contentTypeLine = "Not applicable";

entityBody = "<HTML>" +

"<HEAD><TITLE>Not Found</TITLE></HEAD>" +

"<BODY>Not Found</BODY></HTML>";

}

// Send the status line.

os.writeBytes(statusLine);

// Send the content type line.

os.writeBytes(contentTypeLine);

// Send a blank line to indicate the end of the header lines.

os.writeBytes(CRLF);

// Send the entity body.

if (fileExists) {

sendBytes(fis, os);

fis.close();

} else {

os.writeBytes(entityBody);

}

// Close streams and socket.

os.close();

br.close();

socket.close();

}

}


Avoid Intel Celeron CPUs, buy an AMD instead. Avoid Nokia, go Motorola instead.


Report Offensive Message For Removal

Response Number 1
Name: bamakhrama
Date: November 27, 2004 at 08:27:23 Pacific
Subject: Create Java Executable .jar file?
Reply: (edit)

Hi,
I don't know really where you were looking for?!
Anyway, the answer is on your machine. Go to the directory where Java SDK is installed. You should find a folder called "bin". Inside that folder, you will find Java complier, VM, etc... You will find also an executable called "jar". By getting the help of that command, I got the follwoing:

C:\Program Files\Java\jdk1.5.0\bin>jar
Usage: jar {ctxu}[vfm0Mi] [jar-file] [manifest-file] [-C dir] files ...
Options:
-c create new archive
-t list table of contents for archive
-x extract named (or all) files from archive
-u update existing archive
-v generate verbose output on standard output
-f specify archive file name
-m include manifest information from specified manifest file
-0 store only; use no ZIP compression
-M do not create a manifest file for the entries
-i generate index information for the specified jar files
-C change to the specified directory and include the following file
If any file is a directory then it is processed recursively.
The manifest file name and the archive file name needs to be specified
in the same order the 'm' and 'f' flags are specified.

Example 1: to archive two class files into an archive called classes.jar:
jar cvf classes.jar Foo.class Bar.class
Example 2: use an existing manifest file 'mymanifest' and archive all the
files in the foo/ directory into 'classes.jar':
jar cvfm classes.jar mymanifest -C foo/ .

I hope that it will do the job.


Report Offensive Follow Up For Removal

Response Number 2
Name: Guy
Date: November 27, 2004 at 09:38:56 Pacific
Subject: Create Java Executable .jar file?
Reply: (edit)

I think there are also manifest considerations.

See:

http://www.jguru.com/faq/view.jsp?EID=345949

Guy


Report Offensive Follow Up For Removal







Use following form to reply to current message:

   Name: From My Computing.Net Settings
 E-Mail: From My Computing.Net Settings

Subject: Create Java Executable .jar file?

Comments:

 


  Homepage URL (*): 
Homepage Title (*): 
         Image URL: 
 
Data Recovery Software