Modify the TicTacToeServer /client from deitel How to program

We've been given example code from the deitel & deitel book how to program and have to carry out the following alterations:
a) Modify the TicTacToeServer class to test for a win, loss or draw on each move in the game. Send a message to each client applet that indicates the result of the game when the game is over.
b) Modify the TicTacToeClient class to display a button that when clicked allows the client to play another game. The button should be enabled only when a game completes. Note that both class TicTacToeClient and class TicTacToeServer must be modified to reset the board and all state information. Also, the other TicTacToeClient should be notified that a new game is about to begin so its board and state can be reset.
c) Modify the TicTacToeClient class to provide a button that allows a client to terminate the program at any time. When the user clicks the button, the server and the other client should be notified. The server should then wait for a connection from another client so a new game can begin.
d) Modify the TicTacToeClient class and the TicTacToeServer class so the winner of a game can choose game piece X or O for the next game. Remember: X always goes first.
So far I have only been able to do part a) of the exercise im having a lot of difficulty with part b) which allows the client to play a new game.The code ive done so far is listed below if anyone can help i would be forever greatful. Thanks
// Fig. 18.9: TicTacToeClient.java
// Client that let a user play Tic-Tac-Toe with another across a network.
import java.awt.*;
import java.awt.event.*;
import java.net.*;
import java.io.*;
import javax.swing.*;
public class TicTacToeClient extends JApplet implements Runnable, ActionListener {
private JButton Button;
private JTextField idField;
private JTextArea displayArea;
private JPanel boardPanel, panel2;
private Square board[][], currentSquare;
private Socket connection;
private DataInputStream input;
private DataOutputStream output;
private char myMark;
private boolean myTurn;
private final char X_MARK = 'X', O_MARK = 'O';
boolean done=false;
Container container;
// Set up user-interface and board
public void init()
container = getContentPane();
// set up JTextArea to display messages to user
displayArea = new JTextArea( 4, 30 );
displayArea.setEditable( false );
container.add( new JScrollPane( displayArea ), BorderLayout.SOUTH );
// set up panel for squares in board
boardPanel = new JPanel();
boardPanel.setLayout( new GridLayout( 3, 3, 0, 0 ) );
// create board
board = new Square[ 3 ][ 3 ];
// When creating a Square, the location argument to the constructor
// is a value from 0 to 8 indicating the position of the Square on
// the board. Values 0, 1, and 2 are the first row, values 3, 4,
// and 5 are the second row. Values 6, 7, and 8 are the third row.
for ( int row = 0; row < board.length; row++ ) {
for ( int column = 0; column < board[ row ].length; column++ ) {
// create Square
board[ row ][ column ] = new Square( ' ', row * 3 + column );
boardPanel.add( board[ row ][ column ] );
// textfield to display player's mark
idField = new JTextField();
idField.setEditable( false );
container.add( idField, BorderLayout.NORTH );
Button = new JButton("New Game");
container.add(Button, BorderLayout.BEFORE_FIRST_LINE);
// set up panel to contain boardPanel (for layout purposes)
panel2 = new JPanel();
panel2.add( boardPanel, BorderLayout.CENTER );
container.add( panel2, BorderLayout.CENTER );
} // end method init
// Make connection to server and get associated streams.
// Start separate thread to allow this applet to
// continually update its output in textarea display.
public void start()
// connect to server, get streams and start outputThread
try {
// make connection
connection = new Socket( getCodeBase().getHost(), 12345 );
// get streams
input = new DataInputStream( connection.getInputStream() );
output = new DataOutputStream( connection.getOutputStream() );
// catch problems setting up connection and streams
catch ( IOException ioException ) {
ioException.printStackTrace();
// create and start output thread
Thread outputThread = new Thread( this );
outputThread.start();
} // end method start
// control thread that allows continuous update of displayArea
public void run()
// get player's mark (X or O)
try {
myMark = input.readChar();
// display player ID in event-dispatch thread
SwingUtilities.invokeLater(
new Runnable() {
public void run()
idField.setText( "You are player \"" + myMark + "\"" );
myTurn = ( myMark == X_MARK ? true : false );
// receive messages sent to client and output them
while ( !done) {
processMessage( input.readUTF() );
} // end try
// process problems communicating with server
catch ( IOException ioException ) {
ioException.printStackTrace();
} // end method run
// process messages received by client
private void processMessage( String message )
// valid move occurred
if ( message.equals( "Valid move." ) ) {
displayMessage( "Valid move, please wait.\n" );
setMark( currentSquare, myMark );
// invalid move occurred
else if ( message.equals( "Invalid move, try again" ) ) {
displayMessage( message + "\n" );
myTurn = true;
// opponent moved
else if ( message.equals( "Opponent moved" ) ) {
// get move location and update board
try {
int location = input.readInt();
int row = location / 3;
int column = location % 3;
setMark( board[ row ][ column ],
( myMark == X_MARK ? O_MARK : X_MARK ) );
displayMessage( "Opponent moved. Your turn.\n" );
myTurn = true;
} // end try
// process problems communicating with server
catch ( IOException ioException ) {
ioException.printStackTrace();
} // end else if
else if ( message.equals("Game Over") ){
displayMessage("fuck sake" );
// simply display message
else
displayMessage( message + "\n" );
} // end method processMessage
// utility method called from other threads to manipulate
// outputArea in the event-dispatch thread
private void displayMessage( final String messageToDisplay )
// display message from event-dispatch thread of execution
SwingUtilities.invokeLater(
new Runnable() {  // inner class to ensure GUI updates properly
public void run() // updates displayArea
displayArea.append( messageToDisplay );
displayArea.setCaretPosition(
displayArea.getText().length() );
} // end inner class
); // end call to SwingUtilities.invokeLater
// utility method to set mark on board in event-dispatch thread
private void setMark( final Square squareToMark, final char mark )
SwingUtilities.invokeLater(
new Runnable() {
public void run()
squareToMark.setMark( mark );
// send message to server indicating clicked square
public void sendClickedSquare( int location )
if ( myTurn ) {
// send location to server
try {
output.writeInt( location );
myTurn = false;
// process problems communicating with server
catch ( IOException ioException ) {
ioException.printStackTrace();
// set current Square
public void setCurrentSquare( Square square )
currentSquare = square;
public void actionPerformed(ActionEvent e) {
// I need code here
// private inner class for the squares on the board
private class Square extends JPanel {
private char mark;
private int location;
public Square( char squareMark, int squareLocation )
mark = squareMark;
location = squareLocation;
addMouseListener(
new MouseAdapter() {
public void mouseReleased( MouseEvent e )
setCurrentSquare( Square.this );
sendClickedSquare( getSquareLocation() );
} // end Square constructor
// return preferred size of Square
public Dimension getPreferredSize()
return new Dimension( 30, 30 );
// return minimum size of Square
public Dimension getMinimumSize()
return getPreferredSize();
// set mark for Square
public void setMark( char newMark )
mark = newMark;
repaint();
// return Square location
public int getSquareLocation()
return location;
// draw Square
public void paintComponent( Graphics g )
super.paintComponent( g );
g.drawRect( 0, 0, 29, 29 );
g.drawString( String.valueOf( mark ), 11, 20 );
} // end inner-class Square
} // end class TicTacToeClient
// Fig. 18.8: TicTacToeServer.java
// This class maintains a game of Tic-Tac-Toe for two client applets.
import java.awt.*;
import java.net.*;
import java.io.*;
import javax.swing.*;
public class TicTacToeServer extends JFrame {
private char[] board;
private JTextArea outputArea;
private Player[] players;
private ServerSocket server;
private int currentPlayer;
private final int PLAYER_X = 0, PLAYER_O = 1;
private final char X_MARK = 'X', O_MARK = 'O';
int moves=0;
// set up tic-tac-toe server and GUI that displays messages
public TicTacToeServer()
super( "Tic-Tac-Toe Server" );
board = new char[ 9 ];
for (int i = 0; i<9; i++){
board[i] = ' ';
players = new Player[ 2 ];
currentPlayer = PLAYER_X;
// set up ServerSocket
try {
server = new ServerSocket( 12345, 2 );
// process problems creating ServerSocket
catch( IOException ioException ) {
ioException.printStackTrace();
System.exit( 1 );
// set up JTextArea to display messages during execution
outputArea = new JTextArea();
getContentPane().add( outputArea, BorderLayout.CENTER );
outputArea.setText( "Server awaiting connections\n" );
setSize( 300, 300 );
setVisible( true );
} // end TicTacToeServer constructor
// wait for two connections so game can be played
public void execute()
// wait for each client to connect
for ( int i = 0; i < players.length; i++ ) {
// wait for connection, create Player, start thread
try {
players[ i ] = new Player( server.accept(), i );
players[ i ].start();
// process problems receiving connection from client
catch( IOException ioException ) {
ioException.printStackTrace();
System.exit( 1 );
// Player X is suspended until Player O connects.
// Resume player X now.
synchronized ( players[ PLAYER_X ] ) {
players[ PLAYER_X ].setSuspended( false );
players[ PLAYER_X ].notify();
} // end method execute
// utility method called from other threads to manipulate
// outputArea in the event-dispatch thread
private void displayMessage( final String messageToDisplay )
// display message from event-dispatch thread of execution
SwingUtilities.invokeLater(
new Runnable() {  // inner class to ensure GUI updates properly
public void run() // updates outputArea
outputArea.append( messageToDisplay );
outputArea.setCaretPosition(
outputArea.getText().length() );
} // end inner class
); // end call to SwingUtilities.invokeLater
// Determine if a move is valid. This method is synchronized because
// only one move can be made at a time.
public synchronized boolean validateAndMove( int location, int player )
boolean moveDone = false;
// while not current player, must wait for turn
while ( player != currentPlayer ) {
// wait for turn
try {
wait();
// catch wait interruptions
catch( InterruptedException interruptedException ) {
interruptedException.printStackTrace();
// if location not occupied, make move
if ( !isOccupied( location ) ) {
// set move in board array
board[ location ] = currentPlayer == PLAYER_X ? X_MARK : O_MARK;
// change current player
currentPlayer = ( currentPlayer + 1 ) % 2;
// let new current player know that move occurred
players[ currentPlayer ].otherPlayerMoved( location );
notify(); // tell waiting player to continue
// tell player that made move that the move was valid
return true;
// tell player that made move that the move was not valid
else
return false;
} // end method validateAndMove
// determine whether location is occupied
public boolean isOccupied( int location )
if ( board[ location ] == X_MARK || board [ location ] == O_MARK )
return true;
else
return false;
void gameOverCheck() {
boolean over = false;
// Check rows
for (int start=0; start < 9; start += 3)
over = over || ((board[start] != ' ') &&
(board[start] == board[start+1]) &&
(board[start] == board[start+2]));
// Check columns
for (int start=0; start < 3; start++)
over = over || ((board[start] != ' ') &&
(board[start] == board[start+3]) &&
(board[start] == board[start+6]));
// Check diagonals
over = over || ((board[0] != ' ') &&
(board[0] == board[4]) && (board[0] == board[8]));
over = over || ((board[2] != ' ') &&
(board[2] == board[4]) && (board[2] == board[6]));
if (over || (moves>=9))
for ( int i = 0; i < players.length; i++ )
players.gameOver(over ? (currentPlayer+1)%2 : -1 );
public static void main( String args[] )
TicTacToeServer application = new TicTacToeServer();
application.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
application.execute();
// private inner class Player manages each Player as a thread
private class Player extends Thread {
private Socket connection;
private DataInputStream input;
private DataOutputStream output;
private int playerNumber;
private char mark;
protected boolean suspended = true;
boolean done = false;
// set up Player thread
public Player( Socket socket, int number )
playerNumber = number;
// specify player's mark
mark = ( playerNumber == PLAYER_X ? X_MARK : O_MARK );
connection = socket;
// obtain streams from Socket
try {
input = new DataInputStream( connection.getInputStream() );
output = new DataOutputStream( connection.getOutputStream() );
// process problems getting streams
catch( IOException ioException ) {
ioException.printStackTrace();
System.exit( 1 );
} // end Player constructor
// send message that other player moved
public void otherPlayerMoved( int location )
// send message indicating move
try {
output.writeUTF( "Opponent moved" );
output.writeInt( location );
// process problems sending message
catch ( IOException ioException ) {
ioException.printStackTrace();
void gameOver(int winner) {
try {
output.writeUTF( "Game Over. " +
(( winner == -1 ) ? "No winner." :
( "Winner is " + ( winner == 0 ? 'X' : 'O' ) + "." ) ) );
done=true;
output.writeUTF("Game Over");
} catch( IOException e ) {
e.printStackTrace(); System.exit( 1 );
public void run()
// send client message indicating its mark (X or O),
// process messages from client
try {
displayMessage( "Player " + ( playerNumber ==
PLAYER_X ? X_MARK : O_MARK ) + " connected\n" );
output.writeChar( mark ); // send player's mark
// send message indicating connection
output.writeUTF( "Player " + ( playerNumber == PLAYER_X ?
"X connected\n" : "O connected, please wait\n" ) );
// if player X, wait for another player to arrive
if ( mark == X_MARK ) {
output.writeUTF( "Waiting for another player" );
// wait for player O
try {
synchronized( this ) {
while ( suspended )
wait();
// process interruptions while waiting
catch ( InterruptedException exception ) {
exception.printStackTrace();
// send message that other player connected and
// player X can make a move
output.writeUTF( "Other player connected. Your move." );
while ( ! done ) {
// get move location from client
int location = input.readInt();
// check for valid move
if ( validateAndMove( location, playerNumber ) ) {
displayMessage( "\nlocation: " + location );
output.writeUTF( "Valid move." );
gameOverCheck();
else
output.writeUTF( "Invalid move, try again" );
// close connection to client
} // end try
// process problems communicating with client
catch( IOException ioException ) {
ioException.printStackTrace();
System.exit( 1 );
// end method run
// set whether or not thread is suspended
public void setSuspended( boolean status )
suspended = status;
} // end class Player
} // end class TicTacToeServer

reply #1:
http://forum.java.sun.com/thread.jspa?threadID=5114663
&tstart=0@Op. Don't multi/cross-post

Similar Messages

  • Upgrade the Essbase Client from Version 11.1.2.1 to 11.1.2.2 on LINUX 64 BI

    Hi All,
    Can any one please let me know the process to upgrade the Essbase Client from Version 11.1.2.1 to 11.1.2.2 on LINUX 64 BIT Server. Is it possible to upgrade the essbase client alone or do we need to upgrade the Essbase Server as a whole? Also, does Essbase upgrade is possible from 11.1.2.1 to 11.1.2.2 on LINUX ?
    If Essbase client upgrade is not possible, can you please tell the list of Files that need to be download to Install Essbase server V 11.1.2.2 on LINUX.
    Thanks
    Reddy

    Have a read of the following doc in Oracle Support - "How to Install the Essbase Client Tools MaxL and ESSCMD on a Planning Server Installed on Unix Server [ID 1477705.1]"
    I know the title of the doc is not exactly the same as the question but it gives you an idea of the process based on 11.1.2.2, the easiest solution is probably to apply the maintenance release to upgrade from 11.1.2.1 to 11.1.2.2
    Cheers
    John
    http://john-goodwin.blogspot.com/

  • Deploying the FEP client (SCCM 2012 R2) on computers that already have the FEP client from a previouse failed site installation

    Hello All
    I am in the process of rebuilding our SCCM 2012 R2 site server (single site). The FEP client from the previous sccm 2012 r2 deployment was successfully installed on all of our endpoints and communicating with no issue with the site server. Since losing that
    server we are in the process of deploying a one. My question is, when I configure FEP and the site server attemtps to deploy the FEP client will the current one be reinstalled even though its same version? Or will SCCM just recognize there is already
    a compatible client installed. I asked a similar question about the SCCM client in another post which was very helpful.
    Any advice would be greatly appreciated
    Phillip
    http://social.technet.microsoft.com/Forums/en-US/84923512-b456-4850-b2ba-8d22bb54ab5c/deploying-sccm-2012-r2-clients-to-computers-that-already-have-the-sccm-2012-r2-client-from-failed?forum=configmanagerdeployment#ab630267-6f25-45ff-a732-231b8008876c
    Phil Balderos

    No, the Endpoint Protection client is still a separate client. By, enabling the client settings the ConfigMgr client will make sure that the Endpoint Protection client is installed and makes sure it will be 'managed'. After re-installing the ConfigMgr
    client, the ConfigMgr client will see that Endpoint Protection is already installed and the new ConfigMgr client will start 'managing' the Endpoint Protection client.
    My Blog: http://www.petervanderwoude.nl/
    Follow me on twitter: pvanderwoude

  • In search of assistance learning how to modify the mail message from an out of the box SP2010 approval workflow.

    So, I have found the article
    http://punaro.com/2012/01/derek/modifying-a-sharepoint-2010-workflow-email/comment-page-1/ which appears to walk through the process of modifying an out of the box workflow's mail message.
    However, there is a basic problem that I run into before I get started.
    I am logged into the system as a regular user (ie not a farm admin, etc.).
    I do, however, have full control on the site on which I am working.
    I create a custom list.
    I create a simple one step approval - sharepoint 2010 out of the box workflow.
    I start SharePoint designer and give it the URL of the list. It opens up and I see the various objects on the left side of the screen.
    I click right on the Workflows object - which is where the article says I will find the ability to copy and modify the workflow.
    All I see is "open", "open in a new tab" and "Pin".
    I selecdt open in a new tab - and I get a blank screen labeled workflows that says "There are no items to show in this view".
    So, I click on Lists and Libraries, then on the name of my custom list.
    When the list displays, the Workflows section of the page has a "Modified Workflow" displayed.
    When I right click on it, no menu is shown. When I click on the modified workflow, I get the workflow settings page for that workflow.
    I am trying to figure out how to create the copy of the workflow so that I can modify one of the mail messages in SharePoint designer.
    Is there someone who has some advice on how to find this copy and modify option?  Or perhaps a web site, web forum, article series, or book covering the topic?
    Thank you! 

    Hi lwvirden,
    According to your description, my understanding is that you want to modify the OOB approval workflow in SharePoint Designer.
    After opening the site in SharePoint Designer, just click Workflows in the left panel and then the workflows in the site will load in the right part.
    If you want to copy and modify the OOB approval workflow, then you need to right the approval workflow
    Approval – SharePoint 2010 under Globally Reusable Workflow. After that you will see the
    Copy and Modify button.
    Best regards.
    Thanks
    Victoria Xia
    TechNet Community Support

  • How modify the default page from jdeveloper

    I´m trying set a aplications server whit jdeveloper, but i can´t find a configuration file, to modify the default page showed in http://localhost8080
    can you help me ???

    Thanks Maxi... I explain you, I'm trying to set a webservice whith JDeveloper 11g to simulate 3 layers, a computer whit windows system it will be the front end or first layer, and the second computer whit linux system it will be the second( coordination layer) and third layer ((data base layer)), and , my question is this; Jdeveloper has a server aplications like apache ??? where I can set a default page whith a JSP to connect the first layer whit the layer that has installed the linux system.
    Thanks.

  • The mailto client is gone how do I fix it?

    When I click on a email icon firefox does nothing. I looked up how to set my default email but the MAILTO client is gone. Is there a way to fix this?

    Firefox doesn't do email, it's a web browser.
    If you are using Firefox to access your mail, you are using "web-mail". You need to seek support from your service provider or a forum for that service.
    If your problem is with Mozilla Thunderbird, see this forum for support.
    [http://www.mozillamessaging.com/en-US/support/] <br />
    or this one <br />
    [http://forums.mozillazine.org/viewforum.php?f=39]

  • Modifying the production order from VBAP

    Hi Expers
    I need some modification and write a code so how to proceed with the following comments as below
    Modification to processing of Command Orders & Tickets
    Currently there is an assumption that every sales order (and its deliveries) will include a product which is made to order, i.e. for which a production order will be required.
    In ZINT_CSTPORD_ROUTINES, a check is made to identify the production order linked to the sales order. If there is no such production order (usually because of the customeru2019s credit status) then processing of the ticket is terminated.
    This assumption would fall down if an order was to be raised (in Command) on which there is no concrete material. For example, if we sold a bag of pigment or a screed to a customer. In this case the item would be sold from stock and there would be no need for a production order.
    The solution
    In the routine which checks for the existence of a production order, modify the code as follows:
    u2022     Inspect each item on the sales order
    u2022     If (and only if) there is at least one item with a category of u201CZTACu201D then check for a production order, otherwise process the order in the usual manner.
    Regards
    Piroz

    Thread closed

  • How to capture the ok-code from xd01 to my program

    Hi All,
    I have a big problem. I have created a t-code zxd01 and my program zsapmf02d. In my t-code, in my first screen it looks like xd01 first screen and extra some custom fields.
    In my first screen it has buttons, if they click on "create" button on 1st screen i am calling "Call transaction xd01 and skip first screen". Its calling xd01 2nd screen and remaining things xd01 functionality. but when user presses any ok-code, its coming back to my program. I don't want do this thing for some ok-codes like "enter". How to do this? I am thinking if i capture the ok-code from xd01 and when its coming back to my progarm, i can tell it behave differently.
    How to capture it? Is there any userexits to capture the ok-code, from there using export and import?
    Its a high priority issue. Please help me.
    Thanks

    Sankar,
    Believe creating multiple threads will not help in resolving the issue faster. Please close the other two threads. It will help the members in answering your question properly and it will become easy for you to track the solution also.
    Please understand and read the rules of engagement )
    Thanks,

  • Possible to modify the message clients receive when updates are ready to install?

    An upper-up wants the message clients see when updates are ready for installation changed. They want the "Software changes must be applied to your computer after [date]" changed to something else. Is this possible? (See the image below)

    No, there is no supported way to modify this dialog box.  If you submit feedback on Connect and post a link here, I'd definitely vote it up.
    http://myitforum.com/myitforumwp/2013/12/02/giving-feedback-on-microsoft-connect-for-configmgr-2012-help-yourself-help-the-community/
    Nash
    Nash Pherson, Senior Systems Consultant
    Now Micro -
    My Blog Posts
    If you've found a bug or want the product worked differently,
    share your feedback.
    <-- If this post was helpful, please click "Vote as Helpful".

  • Can I stop the email client from auto opening messages?

    I'd like to get the iPad e-mail working like the iPhone where messages are not "auto opened". Some messages I want to delete without ever opening them, but the mail client always keeps one open all the time. Is there a way to stop this from happening?
    Thanks

    did the restore through itunes but to no avail.
    Then you must have restored and installed your backup when requested.  To remove those emails, you have to restore as new, i.e. without your backup, as roaminggnome suggested.

  • Using the SAF client from the wlfullclient.jar in Tomcat or Jetty?

    I'm trying to use the SAF client in Tomcat and Jetty and if I use the wlfullclient.jar I get the following error when I start the application:
              java.lang.InternalError: error initializing kernel caused by: java.lang.AssertionError: Duplicate initialization of WorkManager
              If I use the "thin" client jars everything works fine. Unfortunately I need to be able to use the full client in some cases. Is there some way to get this to work or is there a conflict between the Weblogic classes and the other Servlet containers?
              Edited by mhellkamp at 08/30/2007 3:42 PM

    I believe the conflict here is with the Tomcat/Jetty WorkManager. I don't think the client was inteneded to run insides another container. That's why you're getting that error of duplicate initialization of WorkManager.
              Why not replace the Tomcat/Jetty with another WebLogic instance? :)

  • I lost all my music from my ipod when syncing and do not have them backed up. I have the purchase list from apple, how can I get that music?

    I lost all my music that I purchased from Itunes. I would like to know how to get all the music that is purchased back? I do not have anything backed up but I have the invoices for all the songs.

    Downloading past purchases from the App Store, iBookstore, and iTunes Store
    http://support.apple.com/kb/HT2519

  • How to use the google search from inside a java program

    Hi guys
    How can i use google search in my java program?
    What will be the type of the reply i get back from google?
    Thanks in advance
    [http://javamilestone.blogspot.com/|http://javamilestone.blogspot.com/]

    Hi,
    You have here some examples about how to make search on google from a Java application.
    The type of reply is JSON
    Here some documentation about it:
    [http://code.google.com/apis/ajaxsearch/documentation/#fonje|http://code.google.com/apis/ajaxsearch/documentation/#fonje]
    And here some snippets:
    [http://code.google.com/apis/ajaxsearch/documentation/#fonje_snippets|http://code.google.com/apis/ajaxsearch/documentation/#fonje_snippets]
    Regards,
    David.

  • In the New group from layers, How can I get more colors on the Folders options in Photoshop CC?

    Hola
    There is any way that I can get more or make my own colors to distinguish the folders in Photoshop CC?
    Please, let me know
    Thanks

    Daniel Ulysses wrote:
    Not good
    Hope someone knows a hidden way to make more colors…
    If you're very good at writing code and willing to hack your copy of Photoshop—but, then, if you were you wouldn't be asking here, I suppose.

  • How do I change the default email client from Thunderbird to Gmail in FF 3.6.17?

    Using Mac, OS 10.6.7 and Firefox 3.6.17
    When I click on an email address link, Thunderbird launches, but I want always to use Gmail. How do I change the email client from Thunderbird to Gmail?

    THANK YOU SO MUCH, Tony!
    I knew it had to be pretty simple...I just couldn't find the exact location to make the change. Now done. What a relief!!!

Maybe you are looking for

  • Synchronous communication scenario

    Hi    I have a current scenario involving a SRM system sending purchase orders to an external supplier through XI 2.0 ( XI-A ). The supplier systems responds synchronously to the PO that it receives with an acknowledgement code. This acknowledgement

  • Help needed for 8i limitation

    Hi, The target is 8i and won't be upgrate to 9i in near future. This let me feel painful when using OWB generated scripts of mapping. The main issue of 8i is that PL/SQL not allow me using nor CASE WHEN neither decode() so most of the mapping scripts

  • XI Error : EXCEPTION_DURING_EXECUTE.Mapping Queue stopped

    Hi All, We are facing an issue when the mapping fails due to a use one as many function it fails the queue and Queue goes into state SYSFAIL. We see the error as XI Error : EXCEPTION_DURING_EXECUTE.Mapping Queue stopped Is this expected ? Isnt the qu

  • Regarding inboundIDOC for posting movement type 701-708 in inventorymgnt

    Hi , I am trying to find the SAP inbound Idoc that is used to post inventory adjustment in SAP ( For Movement type 701-708) in IM .. please guide and also the required field so that i can test it through WE19.. Thanks Rahul

  • MS Access download

    I'm trying to download the Access to 7.3.4 Wizard. I tell it to accept the license terms and then get thrown back to the original screen and the downlod process never starts. I tried it with version for Oracle 8 and it worked. Is that file still avai