Runtime.getRuntime().exec(cmd);
aus einem applet herraus geht das natürlich nicht.
beachte hierzu auch:
http://www.javaworld.com/javaworld/jw-1…1229-traps.html
Runtime.getRuntime().exec(cmd);
aus einem applet herraus geht das natürlich nicht.
beachte hierzu auch:
http://www.javaworld.com/javaworld/jw-1…1229-traps.html
Zitat von Tschebel
Hat jemand eine Idee?
Leider nein, aber dafür habe ich (bzw. meine Mutter) anscheinend den selben wurm wie Du...
SasserFX, Stinger, NortonAV mit aktuellen definitions, alles wirkungslos.
Zitat von michi204hi
danke für den link! wie gesagt, vor allem was preise und dergleichen belangt, habe ich von dieser sparte leider nicht viel ahnung. verstehe ich das mit den 5 clients richtig? zb eine db auf dem server und 5 kassa-applikationen, die auf rechnern laufen, welche irgendwo herumstehen, und die gleichzeitig auf die db zugreifen? bei ähnlich einfachen anwendungsbeispielen kann ich mir kaum vorstellen, dass vom dbms-hersteller viel support notwendig ist. aber korrigiert mich bitte wenn ich das falsch einschätze...
lg michi
Also ich habe auch nicht viel mit lizensierung usw. zu tun. Nach einem kurzen Blick auf Oracles Lizensierungsangebot habe ich mir den billigsten lizensierungsplan mit
€4.175,00 (server) + 5 * €125,00 (für die clients) ausgerechnet.
viele unternehmen brauchen sicher nicht so viel support.
allerdings kann man auch grosse Mengen von kritischen daten verwalten, die von nicht mehr als 5 clients angesprochen werden müssen.
mein derzeitiger arbeitgeber verkauft sein produkt übrigens für €30.000,00 (Server) + ~ €6.000,00 pro client. Unsere Enterprise edition kostet in der billigsten Version €150.000,00 , mit sämtlichen Modulen über €400.000,00 .
In dem Umfeld, wo unser Produkt eingesetzt wird ist es eher ein Nischenprodukt. Andere Applikationen in dem Umfeld sind also wahrscheinlich noch wesentlich teurer.
Bei solchen Preisen fällt es dann kaum noch ins Gewicht, ob du zusätzlich 0, 1.000 oder 10.000€ für das RDBMS hinblättern musst.
Zitat von michi204vielleicht für einige eine etwas dumme frage, aber was genau ist der vorteil dieser teuren software (1600 für eine datenbank mit 5 clients?!) gegenüber kostenlosen produkten (mir fallen auf anhieb etwa mysql oder vnc ein)? abgesehen vom support?
...
aber wie sieht es mit der db aus? sind gängige dbs wie mysql oder postgres nicht multiuserfähig?
lg michi
lg michi
wieso denn abgesehen vom support? Ich glaube gerade das ist ein punkt, weshalb kommerzielle RDBMS in vielen Fällen mehr als 1600 Kröten wert sind (was ich übrigens sehr günstig finde).
Zitat von iX 2/2004
Freie Datenbanken müssen sich nicht hinter ihren kommerziellen Pendants verstecken. Die Referenzlisten belegen dies. Alle sind für den Einsatz im Enterprise-Umfeld geeignet, setzen jedoch unterschiedliche Schwerpunkte. Während MySQL seine Triumphe hauptsächlich in Webanwendungen feiert, konzentriert sich MaxDB auf das SAP-Segment und bietet eine Plattform, die von vornherein mit den meisten wichtigen Werkzeugen ausgestattet ist. Nachteil von MySQL ist die eingeschränkte Konformität zum SQL99-Standard und das Fehlen wichtiger Funktionen. Diesen Missstand will MySQL AB allerdings beheben.PostgreSQL und Firebird liegen irgendwo zwischen den beiden Polen. Firebird ist durchaus als Unternehmensdatenbank tauglich, die notwendigen Tools muss man sich allerdings zusammensuchen. Firmen, die kommerziellen Support anbieten, sind bisher nicht bekannt. Vorteile können die Benutzer aus der Tatsache ziehen, dass Firebird mit Interbase kompatibel ist und sie folglich die Borland-Entwicklungswerkzeuge benutzen können. PostgreSQL stellt mehr die Enterprise- und die wissenschaftlichen Aspekte in den Vordergrund und bietet beispielsweise Spezialitäten wie die Verarbeitung geographischer Daten.
Nicht ganz von der Hand weisen lässt sich das Argument der fehlenden Produktionsstabilität bei so genannten „mission critical“-Anwendungen. Es gibt bei Open-Source-Software eben nicht den einen Hersteller, den man bei Problemen und Fehlern konsultieren kann. Die kommerzielle Lizenz von MaxDB kann - analog zu Suse auf dem Enterprise-Server-Markt - vielleicht das leisten, wonach der Markt verlangt: verlässlichen Support, Wartungsverträge und Service Level Agreements. Allerdings bringt nicht jeder Absturz eines Programms sofort die ganzen Firma an den Rand des Bankrotts. Wem Oracle, DB2 oder der MS SQL Server überdimensioniert oder zu teuer erscheinen, kann es ruhig einmal mit einer Open-Source-Variante versuchen. (jd)
verdammt, ich hab zwischen edit-modus und nachricht abschicken telefoniert.
hätte ich dazwischen mal den thread refreshed, hätte ich mir den ganzen text da oben spaaren können
Zitat von SickaSo ist es, das ist der Konstuktor und soll natürlich MyException heißen, ich habe es oben ausgebessert.
Wenn beim Parsen ein Fehler auftritt, soll nicht die NumberFormatException auftreten, sondern die MyException. (auch wenn es hier nicht viel Sinn macht)
Ich denke, wenn im try-Block ein Fehler auftritt, wid die Exception geworfen, die im catch-Block steht, warum funktioniert das dann hier nicht?
Im catch-block werden exceptions nicht geworfen, sondern abgefangen.
um eine exception zu werfen, kannst du das throws keyword verwenden.
die methode Integer.parseInt(), die du in deinem beispiel verwendest, sieht z.B. ca so aus:
public int parseInt(String s)
throws NumberFormatException
{
if (s == null) {
throw new NumberFormatException("null");
}
//...
}
wenn also z.B der String s null ist, wird mit throw eine NumberFormatException geworfen. diese exception kann jetzt entweder sofort abgefangen werden (mit try/catch), oder wie hier mit dem 'throws NumberFormatException' im methodenheader an die stelle weitergegeben werden, in der die methode aufgerufen wird.
sinn und zweck des ganzen ist es nun, das eben diese NumberFormatException _immer_ irgendwo abgefangen werden muss. Nur so ist sichergestellt, das du den Fall, das zum beispiel der übergebene String null ist, auch berücksichtigst.
du kannst natürlich die NumberFormatException abfangen, und als reaktion eine MyException werfen. das sähe dann zum beispiel so aus:
/*
* Created on 09.07.2004
*
*/
package org.ferrari.tests;
import java.io.*;
public class Beispiel11 {
public void foo()throws IOException,MyException{
System.out.println("Zahl eingeben:");
try {
BufferedReader ein = new BufferedReader(new InputStreamReader(
System.in));
int x = Integer.parseInt(ein.readLine());
primFakt(x, 2);
} catch (NumberFormatException nfe) {
throw new MyException();
}
}
public void primFakt(int x, int i) {
//...
}
public static void main(String[] args) {
Beispiel11 bsp = new Beispiel11();
try {
bsp.foo();
} catch (IOException e) {
// tu etwas für den Fall, dass eine IOException auftritt
} catch (MyException e) {
// tu etwas für den Fall, dass eine MyException auftritt
}
}
}
class MyException extends Exception {
public MyException() {
super("keine Integerzahl eingegeben");
}
}
Alles anzeigen
du kannst auch einfach schreiben:
...
public void foo()throws MyException{
System.out.println("Zahl eingeben:");
try {
BufferedReader ein = new BufferedReader(new InputStreamReader(
System.in));
int x = Integer.parseInt(ein.readLine());
primFakt(x, 2);
} catch (Exception e) {
throw MyException(e.getMessage());
}
}
...
Alles anzeigen
, denn sowohl NumberFormatException als auch IOException sind ja auch Exceptions. Dieses 'sammeln' von Exceptions ist aber mit Vorsicht zu geniessen, da unterschiedliche fehler eventuell eine unterschiedliche behandlung erfordern.
Zitat von TB2Nur mal um die Begriffe zu klären;
PHP ist ein "Parser"? Und wenn irgendwer eine php-Seite aufruft, dann wird der Code auf dem Server selbst nochmals compiliert? Weshalb nicht auf dem Besucherrechner?
Ein Webserver ist ein Program? Es ist kein eigenes Betriebssystem, sondern nur eine Platform, die Besuchern ermöglicht, Dinge auf dem Server zu erreichen?
ein webbrowser ist ene software, die (grob gesagt) html interpretieren kann.
ein browser kann also so etwas:
so anzeigen:
gibst du jetzt eine adresse wie http://anyserver.com/static.html ein, schickt der browser eine _anfrage_ an den computer, der unter dem namen anyserver.com erreichbar ist.
auf diesem computer läuft dann der 'webserver' ein programm dass eine ganz einfache aufgabe erfüllt: es schaut sich deine anfrage an, wählt ein Dokument aus und schickt es dann an den browser zurück. dieses dokument ist fast immer ein html dokument, das der browser dann wie oben beschrieben anzeigen kann.
PHP ist jetzt eine zusätzliche software, die zusätzlich zum webserver installiert wird und mit ihm zusammenarbeitet:
der server wird so konfiguriert, das er bestimmte anfragen ersteinmal an das PHP modul weiterleitet.
schickst du zum beispiel eine anfrage wie http://anyserver.com/dynamic.php, an den server, so sucht der server nicht wie vorhin einfach nach einer datei, die er dir zurückschicken kann, sondern er sucht eine datei dynamic.php und übergibt sie an das PHP Modul.
Dieses übersetzt jetzt das script und erstellt eine html datei, also aus
<html>
<head>
<title>Hello World</title>
</head>
<body>
<?
echo ("<p>Hello World</p>");
?>
</body>
</html>
wird
dieses dokument schickt das php modul dann zurück an den webserver und dieser wiederum zurück an den browser, also an dich.
Zitat von pat270881hi,
danke für deine antwort. Meinst du da die ausgabe "Programmieren mit .NET"??
lg patrick
nein. 'programmieren mit .NET' ist eine spezialausgabe der iX, die grösstenteils aus einer sammlung .NET artikeln aus früheren Ausgaben besteht.
Meiner Meinung nach ist man aber besser beraten, sich eine einführung im Netz durchzulesen und sich für weiterführende Literatur bei O'Reilly (oder einen anderen Verlag) umzuschauen.
Was ich meine ist ein 4-seitiger Artikel in der Aktuellen Ausgabe (vom 7. Juli 2004) über das .NET Compaktframework. Der Artikel heisst 'PocketPC' (S.132) und enthält (unter anderem) besiepielcode, mit dem über einen pocketpc auf einen webservice (Stockquote) zugegriffen wird.
- eine einfache google suche sollte aber eigentlich auch schnell ein solches beispiel zu tage führen.
PS: sehe gerade, das es den source aus dem iX artikel auch zum download gibt.
Zitat von pat270881hi,
hat so keiner bis jetzt erfahrungen mit der entwicklung von zB web Services, die von pda's oder handys in anspruch genommen werden können? - wäre wirklich sehr wichtig.
lg patrick
Wenn du applikationen für handys oder palm pdas schreiben möchtest, bist du mit der Java 2 Micro Edition (J2ME) gut beraten. J2ME applikationen laufen auf den meisten Handys; die wichtigsten Hersteller von Mobiltelefonen sind sogar direkt an der Javaentwicklung beteiligt. Hier eine Einführung in das Thema.
Wenn du speziell für einen PocketPC oder ein Smartphone mit Windows CE/Mobile entwickelst, rate ich dir eher zu Microsofts .NET Compact Framework .
Java ist hier nicht so stark vertreten: die meisten implementierungen sind veraltet oder kostenpflichtig.
Mit dem Visual Studio 2003 ist das entwickeln für den PocketPC ein kinderspiel:
1,2 clicks um ein projekt für das CF zu starten, 1 click um die app in einem emulator zu testen, ein weiterer um die application auf den pda zu spielen. wenn das CF auf dem PDA noch gar nicht installiert ist, wird das beim ersten deployen auch gleich für dich erledigt..
einen webservice zu benutzen ist auf beiden platformen keine hexerei. Vielleicht möchtest du dir die aktuelle iX kaufen, da gibt es einen artikel über das Compact Framework. Unter anderem zeigen sie dort auch den zugriff auf einen webservice.
Zitat von wolkich glaub das war replaceAll(regex,string)
bei eprog (1.4.1) war das noch (string,string) und jetzt ist aus dem einen string eine regular expressiongeworden -> funktioniert altes prog. nicht mehr mit 1.4.2
Also es war jetzt gar nicht so einfach, eine 1.4.1 doku aufzutreiben.
Hab jetzt aber doch eine gefunden und da steht:
String replaceAll(String regex, String replacement)
Replaces each substring of this string that matches the given regular expression with the given replacement.
und in 1.4.2:
String replaceAll(String regex, String replacement)
Replaces each substring of this string that matches the given regular expression with the given replacement.
vielleicht arbeitet man in eprog mit einer beta version?
Zitat von wolkunbedingt die version von java vergleichen
da gibts mittlerweile wirklich dinge die sich mit der neuen version nich kompilieren lassen (1.4.2) von der 1.5er nicht zu redenbsp: in der Klasse String gabs vor der version 1.4.2 eine funktion um einen String im String zu suchen, wenn man die funktion jetzt benutzt "motzt" der compiler, weil sie den übergabeparameter von String auf Expression geändert haben
Welche funktion ist das denn?
Ich finde keine methode weder in 1.3 noch in 1.4.2, auf die deine beschreibung zutrifft.
Also irgendwo verstehen wir uns falsch, denn bei mir lässt sich der Code mit meinen Vorschlägen compilieren und ausführen.
also so sieht der code aus, den ich gerade getestet habe:
file: LoadDictionarys.java
package pussy;
import java.io.File;
import java.io.FilenameFilter;
public class LoadDictionarys {
/** Creates a new instance of LoadDictionarys */
public LoadDictionarys() {
File myDir = new File("E:/documents/labs/workspace/test/src/pussy");
FilenameFilter select = new FileListFilter("c", "java");
File[] contents = myDir.listFiles(select);
if(contents.length > 0){
for (int i = 0; i < contents.length; i++) {
System.out.println(" * "+contents[i]);
}
}
}
}
Alles anzeigen
file: FileListFilter
/*
* Created on 04.07.2004
*
*/
package pussy;
import java.io.File;
class FileListFilter implements java.io.FilenameFilter {
private String name;
private String extension;
// Constructor
public FileListFilter(String name, String extension){
this.name = name;
this.extension = extension;
}
/*ich habe hier noch ein wenig was geändern, weil der filter sonst alles in meinem test-directory wegfiltert.*/
public boolean accept(File directory, String filename) {
boolean fileOK = false;
if(name != null)
fileOK = filename.startsWith("." + extension);
if(extension != null)
fileOK |= filename.endsWith("." + extension);
return fileOK;
}
}
Alles anzeigen
file: test.java
die fehlermeldung beschreibt das problem eh recht genau:
du versucht der methode listFiles(java.io.FilenameFilter) als Parameter einen pussy.FilenameFilter zu übergeben, und das ist nicht erlaubt.
wenn du eine klasse nicht mit ihrem vollständigen pfad angibst, dann wird zunächst das eigene package durchsucht und _erst dann_ die importierten packages.
wenn du in deinem code entweder die deklaration von FileListFilter so umänderst:
oder einfach das interface pussy.FilenameFilter löschst, sollte der fehler nicht mehr auftreten.
also ich glaube nicht das du ein bild in ein applet einladen kannst, ohne
oder das Äquivalent aus dem AWT zu benutzen.
kann auf jedenfall nicht funktionieren, weil das würde die bilder ja vom client laden und ich nehme an, selbst wenn das erlaubt wäre, möchtest du sie eigentlich vom server nachladen.
Du hast meiner Meinung nach 2 Möglichkeiten:
I.)
statt einem Applet Java Webstart verwenden: Das ist wahrscheinlich die bessere Lösung: Du behälst alle Vorteile eines Applets, aber ohne dessen Einschränkungen und Eigenarten.
II.)
eine instanz vom Applet an an die subklasse weitergeben.
damit deine subklasse nicht vom applet 'abhängig' wird, kannst du ja ein interface benutzen...
/*
* Created on 02.07.2004
*
*/
package org.ferrari.tests;
import java.awt.Image;
import java.net.URL;
/**
* @author ferrari
*
*/
public interface ImageLoader {
public Image loadImage(URL url);
}
Alles anzeigen
...das dein applet implementiert...
/*
* Created on 02.07.2004
*
*/
package org.ferrari.tests;
import java.awt.Image;
import java.awt.MediaTracker;
import java.net.URL;
import javax.swing.JApplet;
/**
* @author ferrari
*
*/
public class MyApplet extends JApplet implements ImageLoader{
Logic l = new Logic(this);
public Image loadImage(URL url){
MediaTracker tracker = new MediaTracker(this);
Image img = this.getImage(url);
tracker.addImage(img,1);
try {
tracker.waitForAll();
} catch (InterruptedException e) {
e.printStackTrace();
}
return img;
}
}
Alles anzeigen
...und deine subklasse verwendet...
/*
* Created on 02.07.2004
*
*/
package org.ferrari.tests;
import java.awt.Image;
import java.net.URL;
/**
* @author ferrari
*
*/
public class Logic{
ImageLoader loader;
public Logic(ImageLoader loader){
this.loader = loader;
}
public Image loadImage(URL url){
return loader.loadImage(url);
}
}
Alles anzeigen
alter spammer trick:
binde ein image in dein html document ein.
wenn jemand die email liest, dann wird das bild nachgeladen und in den logfiles deines webservers findest du dann ip, uhrzeit usw.
von dort kannst du sie dann rausfiltern und in eine db eintragen.
das png/gif/jpeg kannst du so klein machen, das man es nicht mehr zu sehen ist.
geht natürlich nur, wenn der benutzer html erlaubt und externe bilder nachgeladen werden. aber wenn ich mich nicht täusche ist das bei outlook standardeinstellung.
hilft dir das weiter?
du kannst dir eine c funktion schreiben, die RegisterHotkey und UnregisterHotkey benutzt und dann mittels JNI darauf zugreifen.
Trivial, aber viele (vor allem neue) Forenbesucher wissen das nicht:
Wenn man in seinem Beitrag Programmcode oder sonst einen vorformatierten Text einfügen möchte, dann kann man ihn in das CODE tag einschliessen:
Dieser Messagetext (ACHTUNG: ohne die '*' Zeichen!!)
[*CODE]
def quicksort(L):
if len(L) > 1:
pivot = random.choice(range(len(L)))
elements = L[:pivot]+L[pivot+1:]
left = [element for element in elements if element < L[pivot]]
right =[element for element in elements if element >= L[pivot]]
return quicksort(left)+[L[pivot]]+quicksort(right)
return L
[*/CODE]
wird dann zu:
def quicksort(L):
if len(L) > 1:
pivot = random.choice(range(len(L)))
elements = L[:pivot]+L[pivot+1:]
left = [element for element in elements if element < L[pivot]]
right =[element for element in elements if element >= L[pivot]]
return quicksort(left)+[L[pivot]]+quicksort(right)
return L
anstatt zu:
def quicksort(L):
if len(L) > 1:
pivot = random.choice(range(len(L)))
elements = L[:pivot]+L[pivot+1:]
left = [element for element in elements if element < L[pivot]]
right =[element for element in elements if element >= L[pivot]]
return quicksort(left)+[L[pivot]]+quicksort(right)
return L
(letzeres führt meistens dazu, das der quellcode nur noch schwer zu entziffern ist.)
Zitat von davewoodAlles anzeigender vollstaendigkeit halber.
es handelt sich um nen UDP chatserver mit clients welche periodisch nachrichten pollen.
Ich speicher die messages fuer jeden client in nem vector
der server holt sich nun alle messages fuer den user mit der funktion blah() welch ein wirklichkeit getMsgs() heisst.
diese funktion soll die enumeration retourgeben und danach alle messages leoschen weil ich sie dann nicht mehr brauche.
david.
hier ein paar anmerkungen, die du (vielleicht) noch nicht bedacht hast:
a.) was passiert, wenn zwischen den Aufrufen von
und
vom client-thread eine neue message hinzugefügt wird? Hast du das in deinem code bedacht?
b.) das ständige clonen des vectors wird ziemlich auf die performance schlagen.
Das was du da machst ist genau dasselbe wie wenn du schreiben würdest:
Warum nicht statt einer gewöhnlichen linearen liste (vector) eine queue verwenden: Auf der einen Seite werden vom client nachrichten hinzugefügt, und auf der anderen seite nimmt sie der server wieder heraus.
Ausserdem ist eine verkettete Liste (LinkedList) hier wahrscheinlich besser als eine ArrayList, da du sehr viele einfügeoperationen hast aber nur wenig in der datenstruktur suchen musst.
c.)
Die Typen java.util.Vector/java.util.Hashtable/java.util.Enumeration sind eigentlich seit java 1.2. veraltet. Stattdessen wird allgemein empfohlen andere klassen vom typ java.util.List , java.util.Map und java.util.Iterator zu verwenden. Das moderne äquivalent zum vector ist z.b. java.util.ArrayList.
Auch wenn die alten Klassen nach wie vor vorhanden (und auch in das Collectionframework eingebunden) sind, ist es doch vor allem bei dem Interface Enumeration besser, stattdessen den Iterator zu verwenden).
siehe hierzu auch: http://java.sun.com/j2se/1.4.2/docs/guide/collections/
lg, Benjamin Ferrari