Start external program, but keep application in foreground - java

I'm writing an RSS reader desktop application in Java with Swing (odd choice, I know) that needs to start the web browser of the user's choice (suppose it's Firefox). I use runtime.exec("firefox -new-window $url"). This starts a new window of Firefox which appears in the foreground.
When I click a link in the application, I want to start Firefox but keep my application on the top (so I can open several links and then go back to them). Is there a way to do this? Preferably it should work with any browser (any program) and start it maximized but not in the foreground, though I'd settle for other solutions like starting minimized or using some command line arguments of Firefox (I haven't found any for this purpose).
It's kind of funny - all the questions about this I've found is people having the opposite problem, and also I've written a similar application several years back in C# which works as intended. I vaguely remember having the same problem, but looking at the sources now, I don't see what was the solution - it seems like it simply starts the browser with no extra stuff.

I got it. The reason why I could not find the right answer was that I was asking the wrong question. The solution has actually nothing to do with launching programs. All that is necessary is to set .setAlwaysOnTop(true); on the main JFrame.

Related

Wiki on a Stick - can it work on Chrome?

I've been using "Wiki on a Stick" for several years and have a few wikis that are full of info (and would be a pain to try to move onto something else). A year or two ago the editing features stopped working on all browsers aside from IE, apparently due to how those browsers handle Java or something.
However, I really hate using IE, so I was trying again to see if I could get it to work on Chrome. When I try it on Chrome, the error message reads: "The TiddlySaver Java applet was not available. Please check that the TiddlySaver.jar is in the same directory as this WoaS and that you have enabled Java permissions for it."
It IS in the same directory, so it sounds like all I need to do is "enable Java permissions for it"... but HOW do I do that?
Thanks.
I am afraid I have some bad news for you. Chrome (and practically all other non-legacy browsers) do no longer support the NPAPI, the technology behind Java "applets". So the applet will never run again. Especially not in Chrome.
The most recent activity in WoaS was more than five years ago, the board and mailing list died, so I doubt there will be an updated version anytime soon.
But I have learnt from the documentation, that the wiki's content is stored in a well-formated XHTML-File; so the parsing/extraction of your content shouldn't be that hard. But this is just from an outside perspective, I did not look into the product any further.
My advice would be to migrate you data as fast as possible, java applet technologie is a dead end.

HTML+CSS in Java GUI on Raspbian?

I want to display a HTML file in my java GUI.
Big problem: this java program has to run on Raspbian (Raspberry Pi).
I used the browser from eclipse swt which worked perfectly on my PC, but there is no swt build for the ARM processor on my RPI...
A JEditorPane is too weak, because I need to display some pages with CSS
Is there any other possibility?
The easiest solution is of course to see of JavaFX is supported on Raspbian. If it is, then you can use the WebView component (http://docs.oracle.com/javafx/2/webview/jfxpub-webview.htm) and most of your problems will be solved. As pointed out in the comments below by jewelsea, this is not a feasible solution yet. This might change with future builds of JavaFX for Raspbian though, so keep an eye on it.
If, for some reason, JavaFX won't work (due to display drivers etc.) then you might want to reconsider your application approach. If you just need to display the HTML file, then you can write it out to disk and display it in the default system browser. If you need to interact with it, it becomes a bit more complicated - you'd basically write a small web server and then respond to user interaction that way. The user will be using their browser of choice, and you'll send responses back to it.

Java Applets not working in IE9

Is there any script or code that solves this problem?
Simply I have an image player in my web site which does not work in IE9. I know there is a solution (Java Applet Not Working (Blank) in IE9) which remove the problem, but if a user have not sufficient knowledge of how Windows works, or the web site is just play on outdoor screens, it need to be fixed with code by developer. Here is my website: http://www.interactivity.com.au/
Do you know any solution on Windows?
Since in a nutshell, the reason they're not working is that they're being blocked by a security feature, by definition there's no way for your applet to get around it. If there was, then it'd be a bug in the filter, and if such a way was found, you'd expect the filter to then be fixed to prevent it.
Add a link on your site to a set of instructions on how to fix the problem.

How does a browser interact with a Flash Player or a Java Applet?

I've been trying to understand how flash animations or a Java Applet work within a browser.
I can think of a couple of ways -
The Flash Player/Java Applet are machine code that's dynamically linked it, and given
some parameters about the area of the screen that belongs to them; after that, they
run within the same process space.
The browser exposes an API that the player/applet use to talk to it and they live
in a separate process. (Presumably they talk via sockets?) The API could correspond to
openGL/X11/some custom calls.
These possibilities still don't explain things like how a button click can make the
player full-screen, how it can play music, how it can inspect the DOM, etc. For that matter,
is the video displayed by decoding to a sequence of images, and rendering them
one at a time, or is there a more efficient way, e.g., of pushing the deltas in the image?
The Wikipedia page on Java Applets (1)
talks about how the applet is run in a sandbox (presumably a separate process), but
it doesn't say how the browser and the applet communicate.
Perhaps the answer depends on the underlying platform?
Any pointers to systematic discussion of this topic would be appreciated (as would
a reference to the APIs).
(My interest in this stems from an insatiable curiosity.)
I'm pretty sure plugins like Java applets and Flash run via NPAPI in most browsers. I looked into this matter myself some time ago and NPAPI was the answer I found.
In the case of browser and Java applets, the applets are typically run within the Java plugin, which runs as a separate process (you can see it e.g. in the task administrator in Windows).
The plugin creates an object for each applet in the DOM, and you can thus interact with the applet from Javascript. Anyway, calls to the applet that take a while to return do have the effect to freeze the browser, therefore I'd say the communication with the plugin runs in the same thread as the main refresh loop. This seems at least to be the case with Firefox.

Why does GWT sometimes successfully compile and other times just stall?

I am working on a demo for a client of what's possible with GWT-Ext for GWT. After browsing for the simplest way to get up and running, I decided on installing the Google Plugin for Eclipse and using the New Web Application Wizard.
First time around, I followed these steps for create the default application:
Selected File > New > Web Application Project from the Eclipse menu.
In the New Web Application Project wizard, entered a name for the project (ExtDemo) and a java package name, com.extdemo.
Unchecked the "Use Google App Engine" check box.
Clicked Finish.
Right clicked it in package explorer and selected Run As > Run Configurations
Put a check in the Automatically Select Unused Port checkbox.
Clicked Run to see the default GWT 1.7 application
This worked fine... it launched GWT's hosted browser and the app worked as supposed to.
(I then continued to import GWT-Ext and add all sorts of widgets building up a nice little demo app)
However at some point when relaunching the app in hosted mode, the hosted browser displays an empty iframe. I even reverted the code to a point where everything was working as supposed to and... same thing, an empty iframe with the surrounding static content.
Now what is really strange is when I go through the process of creating the default application again by following the steps above, the hosted browser launches with an empty iframe again.
However when I click on Compile/Browse, this sometimes allows the app to launch in Firefox.
Anyone have this happen to them?
I have seen some odd behaviors occasionally. Here are some basic suggestions (some are dumb and you might have tried them already):
Use a new workspace
I do not know if GWT plugin somehow caches stuff in the embedded Jetty. If you are re-creating the default app/project, try and use a different name for the project.
Try and re-use a fixed port so that there is no possibility of having multiple servers running.
Update: Found a new "classic" solution:
Delete the cache in IE and possibly Firefox too. Apparently the 'script' tag content tends to be cached by IE. If this works, we can all try tearing our hair out!
Found the updated answer at this link:
I have had the same problem in the past and found it is much more likely to happen if limited CPU is available. For example if my older laptop was running on battery and had stepped down the CPU speed to save power it frequently happened. When running on mains in max performance mode it only happened occasionally. Now I have a much newer and more powerful laptop and the problem has gone away.
Another cause I found was too many breakpoints set up in eclipse and removing breakpoints would often clear the problem.
I've had issues with the browser caching.
Try clearing your browser cache, refresh a few times after a failed load, etc.
You can also try using a different port so the URL is different.
It takes some time to download and run the GWT app, particularly if you are using extra libraries, so wait for a few seconds to see if the app finally loaded.
What makes the app loading to fail randomly is something I don't know yet, but I suspect, as stated by Daniel Vaughan, that is related with a lack of computer resources, CPU, memory, etc.

Categories