我正在设计一个使用java applets的心理学实验.我必须使我的Java小程序全屏.这样做的最佳方式是什么,我该怎么做.
因为我没有使用java applets 3年(我最后一次使用它是一个课程作业:))我忘记了大多数概念.我用Google搜索并发现链接: Dani网站
但是在上面链接中描述的方法中,你必须在applet中放置一个JFrame,我不知道该怎么做.
无论我需要一个快速而肮脏的方法,因为我没有太多时间,这就是我在这里问的原因.
Thanx提前
这适用于Applet,Servlet,Midlet等的子类.
为什么他们不需要main()?如果我想创建一个Craplet始于类init()或类似的东西,它是不好的设计,不然我怎么会去这样做呢?
我在位于http:// localhost:8080/index.html的简单HTML页面上插入了一个Java Applet :
<applet id="applet" code="SomeCode.class" archive="lib.jar" Width="1" Height="1"></applet>
Run Code Online (Sandbox Code Playgroud)
Java Applet有一个类似于下面代码的方法:
public void PostStuffToServer() {
String server = "http://localhost:8080/PostHandler.ashx";
URL u = new URL(server);
URLConnection con = u.openConnection();
con.setDoOutput(true);
con.getOutputStream().write(stream.toByteArray());
con.connect();
}
Run Code Online (Sandbox Code Playgroud)
当我从JavaScript执行applet代码时,如下所示:
obj = document.getElementById('applet');
obj.getClipboardImageURL();
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
访问被拒绝(java.net.SocketPermission 127.0.0.1:8080 connect,resolve)
似乎Java代码将域localhost解析为其等效的IP地址,因此引发了跨域安全限制.当我从http://127.0.0.1:8080/index.html执行相同的代码时,它工作正常.lib.jar文件已签名.
反正有没有避免这个?
我正在与一些人一起制作一个3D太空交易游戏,而我被指派做的其中一件事就是制作一个引导计算机的"隧道",船只穿过,隧道由用户制成的正方形飞到目的地,随着用户离目的地越来越近.
只需渲染船前点的方块,因为这是用户可见的所有内容.在前往目的地的途中,船上的计算机应该在HUD上放置方块,这些方块代表你和目的地之间的空间中的固定点,这些点在距离很小并且随着点接近飞行器而变大.

我已经开始实现这个并且似乎无法解决这个问题,主要是使用对数(Math.log10(x)等等).我试图在"对数空间"中获得船位,以帮助找出在绘制正方形时从哪个索引开始,但事实上我只能到目的地工作的距离混淆了这个问题,尤其是当你考虑到方块的数量必须动态变化以确保它们保持固定在空间中的正确位置(即,在以对数方式变换之前,方块以200左右的间隔定位).
关于这一点,我在0.0d的开始和1.0d的结束之间有一个工作实现,虽然实现不太好.无论如何,问题基本上归结为1d性质.对于此问题,任何建议都会受到赞赏,包括可能达到相同效果的解决方法或解决方案.

(此外,还有一个显示此效果的Youtube视频:http://www.youtube.com/watch?v = 79F9Nj7GgfM&t = 3m5s)
干杯,
克里斯
编辑:改写整个问题.
编辑:新的测试台代码:
package st;
import java.awt.BorderLayout;
import java.awt.Canvas;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferStrategy;
import java.text.DecimalFormat;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.Timer;
public class StUI2 extends JFrame {
public static final double DEG_TO_RAD = Math.PI / 180.0d;
public static final DecimalFormat decimalFormat = new DecimalFormat("0.0000");
public static …Run Code Online (Sandbox Code Playgroud) 我已经阅读了很多这方面的文章/解释,花了太多时间,但一切都太宽泛或具体.
这个问题实际上只适用于我制作的Applet.它包含一个Class,并且需要2个其他Jar库.我已将这些包含在项目中(多个项目,因为我在Netbeans和Eclipse中尝试过这个...很容易重新创建一个Class项目).所有这一切的要点是我的HTML/web项目不应该处理多个Jar或引用它们.它根本不是一个复杂的applet /项目.
最初,我是在Netbeans中制作的.它有主包,在添加2个Jars后,它们被放在"Libraries"区域("resources"文件夹)中.在构建它之后,Netbeans为我的一个包/类创建一个Jar,然后将另外两个库放在它旁边的"lib"目录中.我希望他们在一个可分发的罐子里.从我看过的很多东西中,我尝试将以下内容放在build.xml中:
<target name="YourBigJar" depends="-post-jar">
<jar destfile="dist/BigJar.jar">
<zipfileset src="dist/cxapplet.jar"/>
<zipfileset src="resources/dpotapi.jar"/>
<zipfileset src="resources/dpotjni.jar"/>
</jar>
</target>
Run Code Online (Sandbox Code Playgroud)
但它什么都没产生.我从NetBeans获得了这个- 在一个jar中部署所有内容.我不知道/不了解如何使用build.xml,所以如果出现问题(显然)我不会感到惊讶,但我没有收到任何错误/警告消息.
当我在Eclipse中创建它时,它有效地组合了它们,但是当我在实际的Web项目中使用Jar时,它说它无法从其他2个Jars中找到类.我不明白如何解决它,但它是一个Classpath问题?在Eclipse中,我创建一个名为"lib"的新目录并将Jars放入其中.然后,我右键单击该项目,转到"Java Build Path",然后添加Jars,同时在"Order and Export"选项卡下检查它们.从我读过的东西,我右键单击项目,选择"导出",选择"Jar",取消选中".classpath"和".project"文件,只检查"导出生成的类文件和资源",然后允许它生成清单文件.就像我说的,这会生成一个Jar,但它的内容是我的包,然后是一个"lib"目录,其中包含另外两个Jars.Manifest就在那里,但它很空,并没有引用任何文件(不确定这是否重要).当我把它放在我的网络应用程序中时,它说applet无法找到其他类.
它看起来很简单 - 一个包/类,两个外部Jars ......在构建为applet时可以组合成一个Jar.有任何想法吗?
更新:
自从我们开始使用Maven以来,有人开始使用Maven插件.所以我们最终创建了一个新的项目来容纳applet(因为它用于多个项目),并在我们pom.xml的最终使用它:
<build>
<resources>
<resource>
<directory>${basedir}/applet</directory>
<excludes>
<exclude>codesignstore</exclude>
</excludes>
</resource>
<resource>
<directory>${basedir}/src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.2-beta-5</version>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<finalName>cxapplet</finalName>
<archive>
<index>true</index>
<manifest>
<addDefaultImplementationEntries>true</addDefaultImplementationEntries>
</manifest>
</archive>
<appendAssemblyId>false</appendAssemblyId>
</configuration>
<executions>
<execution>
<id>make-my-applet-jar</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jarsigner-plugin</artifactId>
<version>1.2</version> …Run Code Online (Sandbox Code Playgroud) 我有几种用于编写(繁体中文)台湾人的输入方法,它们与Windows 7一起提供.此外,所有输入方法都有一个选项来切换字符宽度(单字节/双字节字符).
如果我在Java应用程序中选择其中一个输入方法并将字符宽度设置为半角(单字节字符模式),我可以在JTextField中成功输入文本.但是,如果应用程序显示一些对话框(例如JOptionPane)或弹出窗口,则输入法字符宽度将自动更改为全角(双字节字符模式).之后,用户必须手动切换到半角字符.
我可以使用Java类"InputContext"以编程方式打开或关闭输入方法,但是我无法控制输入方法是否设置为全宽/半宽(单/双字节)字符模式.
我想也许可以从Windows输入法设置中禁用它,但是没有与字符宽度的自动切换相关的选项.
问题是:有没有办法处理(禁用)这种自动切换?
以下是使用上述输入方法对此进行测试的示例代码:
public class Example implements ActionListener {
JFrame f = new JFrame("pasod");
JTextField txt = new JTextField();
Button btn = new Button("Locale");
public Example() {
JPanel panel = new JPanel();
panel.setLayout(new GridLayout());
btn.addActionListener(this);
panel.add(btn);
panel.add(txt);
f.add(panel);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.pack();
f.setSize(800, 100);
f.setVisible(true);
}
public static void main(String[] args) {
new Example();
}
public void actionPerformed(ActionEvent arg0) …Run Code Online (Sandbox Code Playgroud) 为了保护我们的用户不受appiulet小程序的影响,我想禁用Java浏览器插件.
在测试(JRE 7)中,我注意到停用插件也会禁用Java Web Start.我们需要使用一个Web Start应用程序,因此似乎我们别无选择,只能启用浏览器插件.
这是正确的,还是有办法在不启用浏览器插件的情况下使用Web Start?
测试步骤:
在命令窗口中,我输入以下命令
出现以下错误框:

它的消息转化为
无法下载此应用程序,因为已停用Java over Internet.您可以通过Java控制面板在此系统上激活Java
我还没有看到在Java控制面板中激活"Java over Internet"的选项.当我启用浏览器插件时,可以启动Java Web Start应用程序.
如果我执行JNLP文件的本地副本,则会出现相同的错误消息
加哇人
<path to local jnlp file>
jnlp文件(略微清理):
<?xml version="1.0" encoding="UTF-8"?>
<jnlp spec="1.0+" codebase="https://example.com/path/to/" href="webstartapp.jnlp">
<information>
<title>...</title>
<vendor>...</vendor>
<homepage href="..." />
<description>...</description>
<description kind="short">...</description>
<description kind="tooltip">...</description>
<offline-allowed />
</information>
<security>
<all-permissions />
</security>
<resources>
<j2se version="1.7+" initial-heap-size="128m" max-heap-size="256m" />
<jar href="Client/lib/Launcher.jar" main="true" />
</resources>
<application-desc main-class="com.veda.launcher.Start">
<argument>...</argument>
<argument>*</argument>
</application-desc>
</jnlp>
Run Code Online (Sandbox Code Playgroud) 我和我的朋友正在开发一款小游戏,我们希望与朋友分享开发阶段.所以我创建了这个小页面http://people.scs.carleton.ca/~manders8/game.html
现在它是我们正在更新的一个.class文件.但由于某种原因,它总是加载旧版本.我知道有一种方法可以关闭java缓存,但我的朋友不是那么称职.另外,为了让人们玩你的游戏,它应该非常容易,并且不需要像屏幕截图那样的5个步骤来试试.
我有这个标签:
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="no-cache">
<meta http-equiv="Expires" content="-1">
<meta http-equiv="Cache-Control" content="no-cache">
Run Code Online (Sandbox Code Playgroud)
因为我认为它可能与浏览器有关,但这没有帮助.
这是我的代码
<applet code="com.murderbody.prototype.TitleScreen.class" codebase="http://people.scs.carleton.ca/~manders8/content/" width=640 height=380></applet>
Run Code Online (Sandbox Code Playgroud)
从小程序更改为:
<object type="application/x-java-applet;version=1.5" width="640" height="380">
<param name="codebase" value="http://people.scs.carleton.ca/~manders8/content/">
<param name="code" value="com.murderbody.prototype.TitleScreen.class">
<param name="cache_option" value="no">
</object>
Run Code Online (Sandbox Code Playgroud) 对于我们设置这些属性后的Java桌面应用程序
System.setProperty("java.net.useSystemProxies","true");
System.setProperty("http.proxyHost", "1.1.1.1");
System.setProperty("http.proxyPort", "8080");
Run Code Online (Sandbox Code Playgroud)
每个http连接都将通过定义的代理完成.
但是对于一个小程序,这些不起作用.(在applet查看器中它可以,但在浏览器中它不会.)小程序总是使用在控制面板\ java \network settings\proxy设置中定义的这些设置.
如何在applet中设置代理? (在每个开放连接中使用代理类对我来说不是一个解决方案.)
Applet使用java 1.6进行签名和编译
目前我们已经开发出一个可以使用java applet对文档进行数字签名的系统.然而,由于禁止使用chrome,我们正在寻找替代数字签名解决方案.
目前签署的工作方式如下:
一种替代解决方案是在浏览器中导入证书并使用js进行签名.但这不是一个用户友好的解决方案.
另一个解决方案可能是要求用户使用JNLP下载运行程序,该程序下载并签署文档并使用HTTP多部分POST自动上载它.这种方法的缺点是它需要额外的用户交互(下载操作)而我们丢失浏览器http会话,因此我们必须再次进行身份验证.
哪个更可行?你能想到另类吗?
applet ×10
java ×10
security ×2
eclipse ×1
fullscreen ×1
html ×1
japplet ×1
jar ×1
javascript ×1
jnlp ×1
liveconnect ×1
logarithm ×1
math ×1
netbeans ×1
properties ×1
proxy ×1
swing ×1
unicode ×1
windows-7 ×1