Avatar billede ladyhawke Novice
18. april 2001 - 14:27 Der er 14 kommentarer og
1 løsning

Hvad skyldes denne fejl?

Jeg får følgende fejl når jeg vil kompilere et program:
Exception in thread \"main\" java.lang.NoClassDefFoundError: Server

Programmet har kørt før (filen hedder Server.java), men pludselig sker ovenstående... Please help
Avatar billede nute Nybegynder
18. april 2001 - 14:28 #1
du refererer til en klasse (Server) som ikke er definert...
Avatar billede disky Nybegynder
18. april 2001 - 14:28 #2
skriver du \'javac Server.java\' i samme skuffe som Server.java ligger ?

Din classpath mangler nok \'current directory\'

Hvad er din Classpath ?
Avatar billede ladyhawke Novice
18. april 2001 - 14:33 #3
Ja jeg skriver javac server.java i samme bibliotek... Problemet opstår først når jeg vil eksekvere: java Server

Min class path ser sådan ud:
CLASSPATH=c:\\jdbc\\mm.mysql.jdbc-1.2c;C:\\jdk1.3.0_02\\bin;%CLASSPATH%
Avatar billede ladyhawke Novice
18. april 2001 - 14:34 #4
Ja jeg skriver javac server.java i samme bibliotek... Problemet opstår først når jeg vil eksekvere: java Server

Min class path ser sådan ud:
CLASSPATH=c:\\jdbc\\mm.mysql.jdbc-1.2c;C:\\jdk1.3.0_02\\bin;%CLASSPATH%
Avatar billede disky Nybegynder
18. april 2001 - 14:35 #5
du skriv din fejl opstod når du kompilede :)

lav din classpath til

CLASSPATH=c:\\jdbc\\mm.mysql.jdbc-1.2c;C:\\jdk1.3.0_02\\bin;%CLASSPATH%;.


se sidste 2 tegn
Avatar billede ladyhawke Novice
18. april 2001 - 14:49 #6
Sorry, mht. hvonår fejlen opstod Det var min fejl jeg opdagede det efter spørgsmålet blev sendt.

gælder de sidste to tegn også når der bruges set classpath i autoexec.bat?
Avatar billede ladyhawke Novice
18. april 2001 - 14:57 #7
Problemet opstår i øvrigt kun ved programmer med threads (foreløbigt) jeg kan eksekvere et simpelt hello world program, men ikke en Threaded Server...
Avatar billede disky Nybegynder
18. april 2001 - 15:07 #8
ja ;. betyder at current directory også er med i classpathen, bare tilføj det i din autoexec.bat
Avatar billede disky Nybegynder
18. april 2001 - 15:12 #9
Prøv

CLASSPATH=c:\\jdbc\\mm.mysql.jdbc-1.2c;C:\\jdk1.3.0_02\\bin;.;%CLASSPATH%

Virker det ikke er der noget galt med din path, din package struktur eller lignende.
Avatar billede ladyhawke Novice
18. april 2001 - 15:13 #10
Desværre har det ingen effekt på problemet...
Der må være et problem i forbindelse med tråde, men hvad?
Avatar billede disky Nybegynder
18. april 2001 - 15:13 #11
kom med source koden
Avatar billede ladyhawke Novice
18. april 2001 - 15:16 #12
import java.awt.Color;
import java.awt.BorderLayout;
import java.awt.event.*;
import javax.swing.*;

import java.io.*;
import java.net.*;

class ClientWorker implements Runnable {
  private Socket client;
  private JTextArea textArea;
 
  ClientWorker(Socket client, JTextArea textArea) {
  this.client = client;
  this.textArea = textArea; 
  }

  public void run(){
    String line;
    BufferedReader in = null;
    PrintWriter out = null;
    try{
      in = new BufferedReader(new InputStreamReader(client.getInputStream()));
      out = new PrintWriter(client.getOutputStream(), true);
    } catch (IOException e) {
      System.out.println(\"in or out failed\");
      System.exit(-1);
    }

    while(true){
      try{
        line = in.readLine();
//Send data back to client
        out.println(line);
        textArea.append(line);
      } catch (IOException e) {
        System.out.println(\"Read failed\");
        System.exit(-1);
      }
    }
  }
}

class SocketThrdServer extends JFrame{

  JLabel label = new JLabel(\"Text received over socket:\");
  JPanel panel;
  JTextArea textArea = new JTextArea();
  ServerSocket server = null;

  SocketThrdServer(){ //Begin Constructor
    panel = new JPanel();
    panel.setLayout(new BorderLayout());
    panel.setBackground(Color.white);
    getContentPane().add(panel);
    panel.add(\"North\", label);
    panel.add(\"Center\", textArea);
  } //End Constructor

  public void listenSocket(){
    try{
      server = new ServerSocket(4444);
    } catch (IOException e) {
      System.out.println(\"Could not listen on port 4444\");
      System.exit(-1);
    }
    while(true){
      ClientWorker w;
      try{
        w = new ClientWorker(server.accept(), textArea);
        Thread t = new Thread(w);
        t.start();
      } catch (IOException e) {
        System.out.println(\"Accept failed: 4444\");
        System.exit(-1);
      }
    }
  }

  protected void finalize(){
//Objects created in run method are finalized when
//program terminates and thread exits
    try{
        server.close();
    } catch (IOException e) {
        System.out.println(\"Could not close socket\");
        System.exit(-1);
    }
  }

  public static void main(String[] args){
        SocketThrdServer frame = new SocketThrdServer();
    frame.setTitle(\"Server Program\");
        WindowListener l = new WindowAdapter() {
                public void windowClosing(WindowEvent e) {
                        System.exit(0);
                }
        };
        frame.addWindowListener(l);
        frame.pack();
        frame.setVisible(true);
        frame.listenSocket();
  }
}

Avatar billede disky Nybegynder
18. april 2001 - 15:19 #13
nu begynder det at blive mærkeligt.

Du har slet ikke nogen klasse eller henvisning til noget der hedder \'Server\'

I hvilken linie skulle den fejl komme ?
Avatar billede ladyhawke Novice
18. april 2001 - 15:23 #14
eksekvering skulle være: java SocketThrdServer

i denne version (mht. filnavnet var det hurtigere at skrive Server.java) Af en eller anden mystifystisk grund, ser det ud til at virke nu :-) Måske har du været i telepatisk forbindelse med min maskine og skældt den lidt ud :-) Tak for hjælpen!
Avatar billede disky Nybegynder
18. april 2001 - 15:34 #15
:-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester